JAVAService - serviço inicia e para

Bom dia.

Estou com o seguinte problema:

Inicio uma classe qualquer em JAVA pelo Java Service, mas a mesma não fica rodando e da a seguinte mensagem quando eu entro so services do windows e clico em iniciar:

“O serviço Teste em computador Local foi iniciado e interrompido. Alguns serviços são interrompidos automaticamente se não estiverem sendo usados por outros serviços ou programas”

Segue o Main da classe servico (Apenas Teste, escreve num txt e depois descansa, só pra ver se o serviço esta funcionando, no caso de iniciar corretamente):

package servico;

import java.io.BufferedWriter;
import java.io.FileWriter;

/**
 *
 * @author jesse.silva
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
            BufferedWriter write;
            while(true)
            {
                write = new BufferedWriter(new FileWriter("c:\\teste.txt",true));
                write.write(String.valueOf(System.currentTimeMillis())+"\n");
                Thread.sleep(10000);
                write.close();

            }
        } catch (Exception e) {
        }
    }

}

Coloquei o .jar dentro de C:\dist e o comando executado no JavaService foi :

Javaservice -install Teste C:\jdk1.6.0_18\jre\bin\server\jvm.dll -Djava.class.path=C:\dist\servico.jar -start servico.Main

Alguém pode me ajudar com este problema?

Obrigado.

Experimente gravar em outro arquivo o resultado do tratamento da exceção. Não se esqueça que telas gráficas não funcionam em serviços (a menos que você configure o serviço como “Interativo”.)

Então, fiz sem nenhuma interação com console ou usuário. Posteriormente farei isso em uma aplicação que tenho já desenvolvida, mas preciso ver funcionando em aplicações simples antes de colocar na principal. Coloquei o erro pra ser escrito em outro arquivo, mas ele nem sequer abre este arquivo no disco…

Alguma outra idéia?

  1. Olhe no Event Viewer (rode o comando EventVwr) e olhe o log de aplicação para ver se o Windows pegou alguma exceção na hora de levantar o serviço.
  2. Talvez o diretório C:\ não seja acessível para o usuário (LocalSystem?) em que você cadastrou seu serviço. Tente criar um diretório (como C:\temp) que seja de acesso indiscriminado (Full Control) para ver se isso não é problema de acesso.

O erro no eventvwr é este:
The LoadLibrary function failed for the following reason: Não foi possível encontrar o módulo especificado.
.

Mudei pra para TEMP do windows e mesma coisa. O Owner do serviço é o System mesmo.

C:\jdk1.6.0_18\jre\bin\server\jvm.dll está nesse lugar mesmo? Ele parece dizer que não encontrou essa DLL, ou então alguma DLL de que esse módulo depende.

Estava errado por descuido agora, mas mesmo mudando nao alterou nada, continua o mesmo erro nos eventos e a mesma mensagem aparecendo,

entanglement, como configurar o serviço como “Interativo”?

Obrigado,

Digite services.msc no

Start -> Run

Dê um duplo clique no serviço desejado

Ache o tab “Log On” e então marque [X] Allow service to interact with desktop

(No Windows em português as coisas estão mais ou menos no mesmo lugar. Não tenho as traduções adequadas aqui

Blz kra! Entendi onde é, mas estava marcada essa opção.

O serviço que criei aparece nos serviços(Aplicação java swing), mas quando peço para iniciar ele diz:
“O serviço “nomeServiço” em Computador Local foi iniciado e interrompido. Alguns serviços são interrompidos automaticamente se não estiverem sendo usados por outros serviços ou programas.”

Aplicações swing funcionam será? Tem idéia de porque está acontecendo isso?

Valeu pela ajuda!

[quote=Jardel.morais]
Aplicações swing funcionam será?[/quote]

Não se deve usar aplicações gráficas (ex. Swing ou SWT) como serviços.
O Windows simplesmente não consegue lidar com tais programas como serviços, desde sua versão inicial. (A “interação” que o Windows deixa fazar é restrita a alguns tipos especiais de MessageBoxes da API do Windows - um JOptionPane não é uma MessageBox da API do Windows.)

Se for necessário criar uma tela para configurar um serviço, escreva um programa separado que faça a tal configuração.