9
votes

Débogage JNLP a commencé l'application

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 jframe utilise jlfeose_on_close comme une fermeture par défaut, mais cela ne 't. Il utilise do_nothing_on_close (implicitement). Aussi, j'appelle explicitement system.exit (0) après avoir relâché tous mes objets: xxx

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é:

  • Démarrer javaws avec les paramètres de débogage et connectez-vous avec jconsole (fonctionne mais je ne trouve aucune exception ou console-toouput).
  • Démarrer javaws avec les paramètres de débogage et joindre Intellij Debugger à celui-ci (fonctionne également mais ne me donne aucune sortie)

    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>


6 commentaires

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);


Pourriez-vous publier le code de gameloop.instance.stoploop () ? Du nom de cette méthode, je pense qu'il pourrait y avoir un attendre () ou tria # joindre () 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 -Class, mais le cadre exécutant. Ainsi, aucun joindre () - ou wait () -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 dans le même contexte.


"est leur vraiment pas d'autre moyen de faire cela" 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/...


3 Réponses :


17
votes

Solution n ° 1 - Activez la console Java et recherchez des exceptions.

Vous pouvez le faire via panneau de commande Java . Passer à avancé onglet et dans la console java Assurez-vous que show console est sélectionné.

puis exécutez votre application et surveiller la console pour des exceptions. Fixez l'exception.

Solution n ° 2 - Débogez votre application en cours d'exécution (correctement).

Démarrez l'application Web Démarrer comme ceci (pour Java 1.6 et plus récent): < Pré> xxx

Si vous utilisez des versions Java antérieures (1.4.2, 1.5) Définissez la variable d'environnement, comme celle-ci: xxx

et exécutez l'application via : xxx

lorsque l'application s'exécute:

  1. Joindre un débogueur (Eclipse fera - utiliser exécuter => configurations de débogage => application java distante et dans connexion Propriétés Panneau Entrez le port passé dans les paramètres à Javaws (dans ce cas: 8123 ).
  2. Définissez un point d'arrêt dans votre FenêtreForce Méthode.
  3. Essayez de fermer votre application - Eclipse devrait casser l'exécution sur votre point d'arrêt
  4. pas dans le gameloop.instance.stoPloop () méthode pour voir où / quand il se bloque.

    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ù.


3 commentaires

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.



2
votes

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:

  1. Activez les journaux Java et la traçage dans le panneau de commande Java> Avancé. Panneau de commande Java: journaux et traçage p> li>

  2. 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
    


0 commentaires

0
votes

Cette réponse est une alternative à Réponse NPE pour activer le débogage distant (Windows).

  • aller au panneau de commande;
  • Cliquez sur Java, pour ouvrir le panneau de commande Java;
  • à l'intérieur du panneau de commande Java, allez à l'onglet Java, puis cliquez sur "Afficher";
  • Cela ouvrira une fenêtre avec des versions Java installées. Sur les paramètres d'exécution met "- xdebug -xrunjdwp: transport = dt_socket, adresse = 8123, serveur = y, suspendre = n" (si vous souhaitez déboguer lorsque l'application commence, changez-la à "Suspendre". "Y", qui fera l'arrêt de l'application jusqu'à ce qu'un éditeur connecte à distance);

     Activation de débogage à distance

    AFER qui, configurez votre éditeur de déboguer à distance sur le port configuré (localhost: 8123 dans ce cas).


0 commentaires