2009-10-01 9 views
3

Possible en double:
Is there a way to the hide win32 launch console from a Java program (if possible without JNI)l'application Déconnecter java de la console/fenêtre de commande

Quand je lance mon application java swing dans un fichier batch sur les fenêtres, la fenêtre console/de commande reste ouverte pendant que mon L'application Java est en cours d'exécution. Cela crée une fenêtre supplémentaire sur ma barre des tâches que je préférerais ne pas avoir. Mais quand je ferme la fenêtre de commande il arrête mon application Java. Existe-t-il un moyen, peut-être via le fichier batch ou les paramètres de ligne de commande ou les modifications de code de mon application, de faire java.exe quitter après avoir mis en place mon application swing et la fenêtre console fermée pendant que mon application fonctionne?

méthode principale est la suivante:

public static void main(String args[]) { 

    ApplContext applContext = new ApplContext(); 
    Throwable error = null; 

    try { 
     applContext.setUserConfigDir(args.length>0 ? args[0] : null); 
     applContext.loadData(); 
     ApplTools.initLookAndFeel(Parameters.P_NIMBUS_LAF.of(applContext.getParameters())); 
    } catch (Throwable e) { 
     error = e; 
    } 

    // JWorkSheet is a JFrame. 
    new JWorkSheet(applContext, error).setVisible(); 
}  
+0

Pourrions-nous voir un extrait de votre code? De préférence, la méthode principale. – jjnguy

+0

En outre, vérifiez ceci: http://stackoverflow.com/questions/649634/how-do-i-run-a-bat-file-in-the-background-from-another-bat-file – daveb

+0

Ceci est un dup de cette question: http://stackoverflow.com/questions/264687/-there-a-way-to-the-hide-win32-launch-console-from-a-java-program-if-possible –

Répondre

6

exécuter votre application avec javaw.exe plutôt que java. Si vous utilisez à partir d'un fichier de chauve-souris, utiliser en combinaison avec la commande start:

> start javaw.exe -jar myapp.jar 

Effectué dans ce mode, il est une bonne idée de mettre en place l'exploitation forestière adéquate ou au moins rediriger vos flux de sortie si vous compter sur la console pour tout débogage. Par exemple, sans console, vous ne verrez jamais ces traces de pile conviviales imprimées pour les exceptions non gérées.

Remarque: java.exe est une application Windows console. En tant que tel, peu importe comment il est démarré, ou quels threads sont en cours d'exécution, une console sera allouée pour cela. C'est la raison pour laquelle il existe javaw.exe.

+0

L'interface graphique ne doit jamais être couplée avec le thread principal en premier lieu. – jjnguy

+0

Je suis totalement d'accord, mais le fait que l'interface utilisateur soit initialisée dans le thread principal ou le thread d'interface utilisateur n'a aucune incidence sur la construction et la maintenance d'une console pour le processus Java. –

1

Idéalement ce que vous allez finir par faire quelque part dans votre code est appel SwingUtilities.invokeLater(Runnable r). Cela va jeter votre code GUI dans le bon thread, et vous devriez être en mesure de fermer la ligne de commande après la sortie du thread principal.

Ceci est un exemple de base de ce que je parle:

public static void main(String[] args){ 
    SwingUtilities.invokeLater(new Runnable(){ 
     public void run(){ 
      JFrame yourWindow = new YourFrame(); 
      yourWindow.createAndShow(); 
     } 
    } 
} 
+1

Bien que ce soit la bonne façon d'initialiser une interface utilisateur Swing, la console ne disparaîtra pas lorsque le thread principal se ferme. Il restera jusqu'à ce que java.exe se termine ce qui est quand le dernier thread non démon dans le processus se termine. –

+0

Vous pouvez fermer une fenêtre de console après la fermeture du thread principal. C'est une façon différente de contourner le problème d'avoir une fenêtre différente, je suppose. – jjnguy

Questions connexes