Bom dia, estou criando com serversocket porta para não deixar o programa java carregar mais de uma vez. Em Alguns windows funciona normalmente e em outros não alguem tem alguma ideia do que pode estar acontecendo. Na verdade no que nao funciona não esta criando a porta que usei 9963.
try{newServerSocket(9963);//escolha sua porta}catch(Exceptione){JOptionPane.showMessageDialog(this,“Sistemajáaberto,Minimizado”,“Mensagem”,JOptionPane.ERROR_MESSAGE);System.exit(0);}
Como que você vai saber o que está acontecendo se nem a mensagem da exceção vc exibe? Essa porta está liberada no firewall do sistema operacional da máquina?
C
Claudio59
obrigado por responder. Logo inicio do programa faço o serversocket na porta 9963
ai se eu tentar carregar o mesmo programa de novo faço a exceção com mensagem
que ja esta aberto e minimizado e dou System.exit(0). Para não ficar com dois ou
mais abertos. Já testei em alguns micros e funcionou mas em outro não pois não
cria a porta 9963. Verifiquei com netstat -ano que mostra as portas no windows.
rodriguesabner
o que mais vejo são aplicações que criam arquivos temporários e fazem o lock quando o arquivo já existe. Não compensa pra vc fazer igual?
davidbuzatto
Oloco bicho, que gambiarra meu amigo… Veja o exemplo abaixo (está comentado).
importjava.awt.*;importjava.awt.event.*;importjava.util.prefs.*;importjavax.swing.*;publicclassAppextendsJFrame{// cria ou obtem um nó de preferências no sistema operacionalprivatestaticfinalPreferencesPREFS=Preferences.userRoot().node("nome_da_app");// uma chave para identificar o status da aplicaçãoprivatestaticfinalStringAPP_ABERTA="aberto";publicApp(){setDefaultCloseOperation(EXIT_ON_CLOSE);setTitle("Aplicação...");setSize(200,200);add(newJLabel("Aplicação..."),BorderLayout.CENTER);setLocationRelativeTo(null);addWindowListener(newWindowAdapter(){@OverridepublicvoidwindowClosing(WindowEvente){// quando a janela fechar, armazena que a aplicação não está abertaPREFS.putBoolean(APP_ABERTA,false);}});}publicstaticvoidmain(Stringargs[]){// em caso de fechamento inesperado, pode-se resetar o status// passando o argumento "reset" na linha de comando// algo assim: javaw App reset ou então javaw -jar App.jar resetif(args.length>0){if(args[0].equals("reset")){PREFS.remove(APP_ABERTA);}}// se a aplicação não está abertaif(!PREFS.getBoolean(APP_ABERTA,false)){// armazena o status abertoPREFS.putBoolean(APP_ABERTA,true);// abre a janela e continua...EventQueue.invokeLater(newRunnable(){publicvoidrun(){newApp().setVisible(true);}});// se a aplicação já está aberta}else{JOptionPane.showMessageDialog(null,"A aplicação já está aberta!","Alerta",JOptionPane.WARNING_MESSAGE);System.exit(1);}}}
C
Claudio59
Obrigado pela atenção, vou testar
C
Claudio59
Obrigado pela resposta
C
Claudio59
o exemplo que me passou esta funcionando. Fiz alteracões com base no que me passou mas
quando executo só entra no if da A aplicação já está aberta!.
quando mudo o teste do if ( !PREFS.getBoolean( APP_ABERTA, false ) ) {