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();
}
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!!!
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.
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:
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.
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!!!
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.
(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.
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?
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.
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.
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!
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:
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!!!