2009-10-01 22 views
3

可能重複:
Is there a way to the hide win32 launch console from a Java program (if possible without JNI)斷開的Java應用程序

當我運行在Windows上的批處理文件,我的Java Swing應用程序,控制檯/命令窗口保持,同時打開我的Java應用程序正在運行。這會在我的任務欄上創建一個額外的窗口,我不希望這樣。但是當我關閉命令窗口時,它會停止我的Java應用程序。有沒有辦法,可能通過批處理文件或命令行參數或代碼更改到我的應用程序,讓我的應用程序仍然運行時啓動我的swing應用程序和控制檯窗口關閉後退出java.exe?

主要方法如下:

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 2009-10-01 00:45:41

+0

此外,檢查了這一點:http://stackoverflow.com/questions/649634/how-do-i-run-a-bat-file-in-the-background-from-another-bat-file – daveb 2009-10-01 00:55:55

+0

這是一個這個問題的重複:http://stackoverflow.com/questions/264687/is-there-a-way-to-the-hide-win32-launch-console-from-a-java-program-if-possible – 2009-10-01 01:12:25

回答

6

javaw.exe,而不是Java運行你的應用程序。

> start javaw.exe -jar myapp.jar 

在此模式下運行,這是一個好主意,建立適當的記錄或至少重定向如果您的輸出流:如果你從一個批處理文件運行,結合了start命令使用依靠控制檯進行任何調試。例如,在沒有控制檯的情況下,您將永遠不會看到爲未處理的異常而打印的友好堆棧跟蹤。

注意:java.exe是一個Windows 控制檯應用程序。因此,無論它是如何啓動的,或者它正在運行什麼線程,都會爲它分配一個控制檯。這就是javaw.exe存在的原因。

+0

首先,GUI不應該與主線程耦合。 – jjnguy 2009-10-01 00:58:19

+0

我完全同意,但UI是在主線程中初始化還是在UI線程中對於是否爲Java進程構建和維護控制檯沒有影響。 – 2009-10-01 01:01:16

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 UI的正確方法,但當主線程退出時,控制檯不會消失。它將保持到java.exe退出,這是進程中最後一個非守護進程線程退出時。 – 2009-10-01 01:05:36

+0

您可以在主線程退出後關閉控制檯窗口。這是我猜想有不同窗口的問題的另一種方式。 – jjnguy 2009-10-01 01:09:42