Débogage JNLP commencé application

J'ai créé un bureau Java de l'application (à l'aide de Swing) et je suis maintenant en essayant de le faire fonctionner en le démarrant à partir du net à l'aide de JNLP. L'application fonctionne très bien quand je le lance depuis le terminal, mais dès que je le lance à partir de JNLP, il ne ferme pas. J'ai manuellement tuer le processus à chaque fois.

J'ai lu qu'il pourrait y avoir un problème si mon JFrame utilise DISPOSE_ON_CLOSE que la valeur par défaut à proximité de la coopération, mais il ne le fait pas. Il utilise DO_NOTHING_ON_CLOSE (implicitement). Aussi, je suis en appelant explicitement System.exit(0) après relâchement de tous mes objets:

f = new JFrame("Pacman");
f.addWindowListener(new WindowAdapter() {
    @Override
    public void windowClosing(WindowEvent e) {
        //Terminate the Game-loop:
        GameLoop.INSTANCE.stopLoop();
        //Close the application:
        System.exit(0);
    }
});

Je suppose qu'il pourrait y avoir une exception levée lorsque je ferme l'application, mais je ne peux pas trouver un moyen d'obtenir la console de sortie (par exemple, le Stack-Trace) d'une application en cours d'exécution a commencé avec JNLP. Voici ce que j'ai essayé:

  • Commencer javaws avec les paramètres de débogage et de se connecter avec jconsole (fonctionne mais je ne trouve pas toute exception ou de la console de sortie).
  • Commencer javaws avec les paramètres de débogage et de joindre IntelliJ débogueur (fonctionne aussi mais ne me donne pas toute sortie)

Alors, comment puis-je démarrer l'application avec JNLP et obtenir la sortie (écrit à la valeur par défaut de sortie et d'erreur-les ruisseaux), comme si je le ferais avec une application de bureau?

J'aimerais l'aborder comme try { GameLoop.INSTANCE.stopLoop(); } catch(Exception e) { e.printStackTrace(); /* maybe pop a JOptionPane for debugging */ } // Close the application: System.exit(0);
Pourriez-vous poster le code de GameLoop.INSTANCE.stopLoop()? Le nom de cette méthode, je pense, qu'il peut être un wait() ou Threa#join() appelé qui l'attend à l'infini pour une raison quelconque. Débogage de cette méthode est aussi une bonne idée.
Je ne suis pas en utilisant la Threadde classe, mais l'exécuteur-cadre. Donc, pas de join()- ou wait()-appels. Vous pouvez trouver l'ensemble de la classe (et de l'ensemble du projet) ici
Est leur vraiment pas d'autre moyen de le faire (sainement)? Si l'application se bloque, je ne pense pas que ça va frayer un JOptionPane dans le même contexte.
"Est leur vraiment pas d'autre moyen de le faire" je n'ai jamais voulu insinuer que c'était la seule façon. C'est juste un " quick-n-sale façon de suspendre l'exécution avant de s'éteindre. Vous pouvez vider la pile oligo-éléments pour le volet options.

OriginalL'auteur Lukas Knuth | 2012-06-05