J'ai créé une application de bureau Java (utilisant Swing) et j'essaie maintenant de le faire fonctionner en le démarrant du net à l'aide de JNLP. L'application fonctionne bien lorsque je le démarre depuis le terminal, mais dès que je le lance de JnLP, il ne ferme pas. Je dois tuer manuellement le processus à chaque fois.
J'ai lu qu'il pourrait y avoir un problème si mon Je suppose qu'il pourrait y avoir une exception Lorsque je ferme l'application, mais je ne trouve pas de moyen d'obtenir la sortie de la console (par exemple, la pile-trace) d'une application en cours d'exécution a commencé avec JNLP. Voici ce que j'ai essayé: p> Ainsi, comment puis-je démarrer l'application avec JNLP et obtenir la sortie (écrite sur les flux d'erreur par défaut), comme si je le ferais avec une application de bureau normale? P> < / p> jframe code> utilise
jlfeose_on_close code> comme une fermeture par défaut, mais cela ne 't. Il utilise
do_nothing_on_close code> (implicitement). Aussi, j'appelle explicitement
system.exit (0) code> après avoir relâché tous mes objets: p>
javaws code> avec les paramètres de débogage et connectez-vous avec
jconsole code> (fonctionne mais je ne trouve aucune exception ou console-toouput). Li>
javaws code> avec les paramètres de débogage et joindre Intellij Debugger à celui-ci (fonctionne également mais ne me donne aucune sortie) li>
ul>
3 Réponses :
Vous pouvez le faire via panneau de commande Java em>. Passer à avancé em> onglet et dans la console java em> Assurez-vous que show console em> est sélectionné. P> puis exécutez votre application et surveiller la console pour des exceptions. Fixez l'exception. P> Démarrez l'application Web Démarrer comme ceci (pour Java 1.6 et plus récent): p> < Pré> xxx pré> Si vous utilisez des versions Java antérieures (1.4.2, 1.5) Définissez la variable d'environnement, comme celle-ci: p> et exécutez l'application via : p> lorsque l'application s'exécute: p> Ne vous attendez pas à voir des solutions dans la console, il suffit de passer à travers le code avec un débogueur - si l'application se bloque, elle vous montrera où. P> h3> Solution n ° 2 - Débogez votre application en cours d'exécution (correctement). H3>
Javaws code> (dans ce cas:
8123 code>). Li>
FenêtreForce Code> Méthode. Li>
gameloop.instance.stoPloop () code> méthode pour voir où / quand il se bloque. Li>
ol>
Nice, j'ai maintenant l'exception. Merci!
L'option Xnoagent est-elle vraiment nécessaire pour les versions Java plus récentes?
Après avoir lancé Javaws avec option suggérée dans la solution n ° 2, avec Java 7, mon application se lance, mais lors de la démarrage du débogueur de Eclipse, il ne peut pas se connecter à la machine virtuelle. J'ai spécifié le bon port no (8123) utilisé pour lancer Javaws. Une observation était que Javaws n'était pas montrant dans le responsable des tâches comme un processus qui m'a surpris que la demande de lancement.
Il y a des moments où même la console ne montre rien, par exemple lorsqu'il y a un problème avec la poignée de main TLS / SSL (c'est-à-dire une station de main ou une poignée de main). Dans ces cas, vous devez faire ce qui suit:
Activez les journaux Java et la traçage dans le panneau de commande Java> Avancé.
p> li>
Activez les paramètres de débogage Java et lancez le JNLP, vous pouvez le faire de deux manières: P>
2.A. Téléchargez le fichier JNLP et exécutez-le à partir de la ligne de commande (la commande Set code> n'est pas requise dans ce cas particulier). P>
set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all
javaws -wait jnlp.jnlp
Cette réponse est une alternative à Réponse NPE pour activer le débogage distant (Windows). P>
AFER qui, configurez votre éditeur de déboguer à distance sur le port configuré (localhost: 8123 dans ce cas). P>
Je l'aborderais comme
essayer {gameloop.instance.stoplelop (); } Catch (Exception E) {E.PrintStackTrace (); / * Peut-être que pop a JOPTIONPANE pour débogage * /} // Fermer l'application: System.exit (0); Code>
Pourriez-vous publier le code de
gameloop.instance.stoploop () code>? Du nom de cette méthode, je pense qu'il pourrait y avoir un
attendre () code> ou
tria # joindre () code> appelé qui attend infiniment pour une raison quelconque. Déboguer cette méthode est également une bonne idée.
@npe je n'utilise pas le fichier
code> -Class, mais le cadre exécutant. Ainsi, aucun
joindre () code> - ou
wait () code> -Calls. Vous trouverez peut-être la classe entière (et l'ensemble du projet) ici
@Andrewthompson n'est-il vraiment pas autre moyen de faire cela (sanely)? Si l'application est suspendue, je ne pense pas que cela va apparaître un
Joptionpane code> dans le même contexte.
"est leur vraiment pas d'autre moyen de faire cela" i> je n'ai jamais voulu impliquer que c'était la seule façon. Il s'agit simplement d'une méthode «Quick-N-sale» de mettre en pause l'exécution avant de fermer. Vous pouvez jeter les oligo-éléments de la pile sur le volet d'option.
Dupliqué de Stackoverflow.com/Questtions/686061/...