Falha na execução de thread [RESOLVIDO]

16 respostas
vanessa.tenorio

Pessoal, bom dia!
Abaixo segue parte da minha classe do meu projeto, no qual o arquivo .jar parece não executar a thread =( ele realiza apenas os comando do método que apresenta como comentário OK e depois parece que ele nao está executando a segunda Thread. Nenhum erro está sendo apresentado na execução. Poderiam me sugerir alguma solução?
Ah, no netbeans executa a thread perfeitamente.

GRATA!

public class Principal extends javax.swing.JFrame {

   
    /**
     * Creates new form Principal
     */
    public Principal() {

        initComponents();

        setLocation(400, 100);

        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); 
        } catch (Exception e) {
        }

        new Thread(new Runnable() {//thread OK

            @Override
            @SuppressWarnings("static-access")
            public void run() {

                // Executa somente uma vez essa rotina!
                abrirArquivo(); //OK

            }
        }) {
        }.start();

        new Thread(new Runnable() { //esta  Thread parece nao executar 

            private int numero_vezes = 0;

            @Override
            @SuppressWarnings("static-access")
            public void run() {
                inicializaJoyStick();

                while (true) {

                    try {

                        //if (numero_vezes >= 50) {

                        numero_vezes = 0;
                        updateJoyStick();
                        renderJoyStick();

//                        } else {
//                            numero_vezes++;
//                        }

                        controla_joystick();

                    } catch (Exception e) {
                    }

                    try {
                        //Thread.sleep(500);
                        Thread.sleep(10);

                    } catch (Exception ex) {
                    }


                }


            }
        }) {
        }.start();

    }

16 Respostas

E

É, “nenhum erro está sendo mostrado na execução” porque você não quer mostrar :slight_smile:

try {  
...  
                    } catch (Exception e) {  
                    }

Pelo menos ponha um “e.printStackTrace” aqui no lugar do tratamento das exceções.

vanessa.tenorio

Muito obrigada, mas realmente, quando executo o arquivo .jar, a segunda thread não está sendo executada. Inseri o comando que foi solicitado para apresentação de erros e nenhum erro ocorre. Tem outras sugestões para me ajudarem?
Obrigada!!!

E

Eu sei que há coisas erradas ou não-recomendáveis no código que você escreveu, mas quanto ao seu problema em particular (a thread que parece que não executa) eu não sei lhe apontar o problema só de olhar o código que você mostrou.

Portanto, vou só dizer o que está esquisito.

A primeira coisa é que

try {  
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");   
        } catch (Exception e) {  
        }

não deve ser chamado dentro de um construtor de uma classe derivada de JFrame.
Eu indicaria para isso ser executado no próprio método main() que cria os JFrames, e antes de qualquer chamada a qualquer método do Swing, já que isso é algo que afeta globalmente todas as janelas do Swing. De qualquer forma, o mais indicado, nesse caso, seria usar:

// Veja: http://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
        try {  
            UIManager.setLookAndFeel(
                UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {  
            // tratar as exceções aqui
        }

A segunda coisa é que você não está sabendo, na verdade, se a thread aparenta ou não estar rodando. Uma forma de você descobrir isso é botar uns System.out.println em alguns trechos dessa thread e ver se estão realmente saindo no console do Eclipse ou NetBeans ou no console do Windows.

vanessa.tenorio

entanglement , realizei cada sugestão que você apresentou e tive o seguinte resultado:
*Quando executo o projeto no NetBeans, nenhum erro é apresentado. Executa perfeitamente. Porém, executando o projeto atravéz do comando: java -jar projeto.jar, no Prompt de comando do windows, foi-me apresentado este problema: exception in thread “thread 4” java.lang.NoClassDefFoundError: net/java/games/input/ControllerEnvironment. O que se trata este erro?
Grata!!!

E

Ah, entendi agora. Essa classe de controle de joystick precisa de um JAR que você não pôs no classpath do seu programa quando você tentou rodá-lo pelo prompt de comando do Windows.
Não sei qual é o nome do JAR do controle de joystick.
Digamos que o nome do jar fosse ControleJoystick.jar.

Então você teria de usar algo parecido com:

java -classpath ControleJoystick.jar -jar projeto.jar

(se ControleJoystick.jar não estiver no mesmo diretório do projeto.jar, você precisa especificar também o diretório na hora de pôr o comando classpath.

vanessa.tenorio

Então, a classe de controle do joystick é jinput.jar, porém o erro manteve e também apresentou uma causa:
Exception in thread “thread 4” java.lang.NoClassDefFoundError: net/java/games/input/ControllerEnvironment
Caused by: java.lang.classnotfoundexception: net.java.games.input.ControllerEnvironment
.
Se o projeto.jar encontra-se no mesmo diretório que o controle do joystick, por que este erro ainda é apresentado? :frowning:

E
java -classpath jinput.jar -jar projeto.jar

não funcionou?

vanessa.tenorio

Infelizmente não funcionou, a falha manteve. :cry:

vanessa.tenorio

Está sendo apresentados os mesmos erros anteriores e o .jar, continua não executando algumas funcionalidades. :cry:

E

Pois é. Pode ser que esse JAR dependa, por exemplo, de uma DLL que ele não encontrou, e por isso é que ele acabou dando essa mensagem esquisita de erro. Mas você está no caminho - tem de checar direitinho essa parte de arquivos, de classpath e outras coisas chatas.

O

Pergunta idiota: jinput.jar e projeto.jar estão no mesmo diretório?

vanessa.tenorio

oyama, não é idiota sua pergunta não, pois sua ajuda é importante.
Então, jinput.jar e projeto.jar estão no mesmo diretório. =D

E

Olá!

Se não me engano, existe uma opção no eclipse (não sei se no netbeans existe também) que você manda ele exportar para dentro do seu jar todas as classes que o seu projeto depende, direta ou indiretamente.

Tenta procurar algo semelhante no netbeans.

vanessa.tenorio

Olá els1234, quando clico com o botão direito sobre o projeto e seleciono a opção: clean end build, é construido o arquivo .jar. Porém eu não sei se falta alguma dll, pois apenas o .jar que está com problemas. No netBeans, está executando perfeitamente.
Grata pela ajuda!

E

Olá,

tenta clcar com o botão direito e procura algo como: “export”…

o que está acontecendo é que a sua classe utiliza a classe “net.java.games.input.ControllerEnvironment”. Quando o java vai instanciar essa classe ele não a encontra e exibe a exception para você.

No netbeans ela deve ser carregada por default… já pela linha de comando não…

tente abrir o jar “jinput.jar” com o winrar ou qualquer outro descompactador e vá navegando pelo diretório da classe. Ex:

net.java.games.input.ControllerEnvironment ====== net/java/games/input/ControllerEnvironment.class

se esse .class não existir o jar que você possui está incorreto.

vanessa.tenorio

Olá!!! Consegui resolver o problema analisando todos os pontos que me apontaram. A grande questão era: deixar no mesmo diretório do .jar o arquivo jinput-dx8.dll.
Muito obrigada a todos!!! :smiley:

Criado 3 de setembro de 2012
Ultima resposta 5 de set. de 2012
Respostas 16
Participantes 4