2009-10-01 3 views
3

Можно создать дубликат:
Is there a way to the hide win32 launch console from a Java program (if possible without JNI)Отключить приложение Java из консоли/командного окна

Когда я запускаю мой Java-приложение свинга в пакетном файл на окнах, окно консоли/команды остается открытым, пока мои приложение java запущено. Это создает дополнительное окно на моей панели задач, которое я бы предпочел не иметь. Но когда я закрываю окно команды, оно останавливает мое приложение Java. Есть ли способ, возможно, с помощью командного файла или параметров командной строки или изменения кода в моем приложении, чтобы выйти из java.exe после того, как я запустил приложение swing и окно консоли, пока мое приложение все еще работает?

Основной метод заключается в следующем:

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

Можем ли мы видеть фрагмент кода? Предпочтительно основной метод. – jjnguy

+0

Также проверьте это: http://stackoverflow.com/questions/649634/how-do-i-run-a-bat-file-in-the-background-from-another-bat-file – daveb

+0

Это dup этого вопроса: http://stackoverflow.com/questions/264687/is-there-a-way-to-the-hide-win32-launch-console-from-a-java-program-if-possible –

ответ

6

Запуск приложения с javaw.exe, а не Java. Если вы работаете из файла летучей мыши, использовать в сочетании с start команды:

> start javaw.exe -jar myapp.jar 

При запуске в этом режиме, это хорошая идея, чтобы создать надлежащую регистрацию или, по крайней мере перенаправить выходные потоки, если вы полагайтесь на консоль для любой отладки. Например, без консоли вы никогда не увидите, что эти дружественные трассировки стека напечатаны для необработанных исключений.

Примечание: java.exe является Windows консоль приложение. Таким образом, независимо от того, как он запущен или какие потоки запущены в нем, для него будет выделена консоль. Именно по этой причине существует javaw.exe.

+0

GUI никогда не должен быть связан с основной нитью в первую очередь. – jjnguy

+0

Я полностью согласен, но инициализирован ли пользовательский интерфейс в основном потоке или потоке пользовательского интерфейса, не имеет никакого отношения к тому, построена ли консоль и поддерживается ли она для процесса Java. –

1

В идеале, что вы в конечном итоге сделать где-то в коде вызова SwingUtilities.invokeLater(Runnable r). Это превратит ваш код GUI в правильный поток, и вы сможете закрыть командную строку после выхода основного потока.

Это простой пример того, что я говорю:

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

Хотя это правильный способ инициализации пользовательского интерфейса Swing, консоль не исчезнет при выходе основного потока. Он останется до выхода java.exe, который будет, когда последний поток не-демона в процессе завершается. –

+0

Вы можете закрыть окно консоли после выхода основного потока. Похоже, проблема в том, что у меня другое окно. – jjnguy

Смежные вопросы