2015-01-09 94 views
0

我有一點問題。我有一個Java程序,當它啓動時創建一個JFrame,並在另一個線程中執行一個進程。最後一個過程使用「System.out.println」將消息記錄到標準輸出。我想執行這個Java程序,並看到JFrame,但不是控制檯。我希望其他進程的日誌記錄到文件中。我在.bat文件中編寫了這條指令:使用JFrame和控制檯從.bat執行java程序

start javaw -jar InterceptorProcess.jar > logger.log 2>&1 

但是,它不起作用。我看到了JFrame,另一個進程正在運行,但這些消息沒有進入「logger.log」。我需要在蝙蝠身上做些什麼改變?如果不改變java程序,也許是不可能的。

問候!

這是java程序的代碼:

public class InterceptorProcess 
{ 


public static void main(String[] args) 
{ 
    FrameInterceptor frame = new FrameInterceptor(); 
    frame.setResizable(false); 
    frame.setTitle("HELLO!"); 
    Image icon = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB_PRE); 
    frame.setIconImage(icon); 
    frame.setLocationRelativeTo(null); 
    frame.setVisible(true); 

    System.out.println("HELLO WORLD!"); 
} 
} 
+0

如果您啓動另一個進程並且不重定向該進程的'stdout'和'stderr',它將不會被捕獲到您的java程序的輸出中。在這一點上,它將成爲自己的IO管道。 – 2015-01-09 22:43:26

+0

@Ryan J,另一個過程是一個線程。代碼也放入「.jar」文件中。 – Nico 2015-01-09 22:45:26

+0

你的OP說「...在另一個線程中執行一個進程。」我讀到「我在另一個線程中執行進程」。你在執行什麼「過程」?另外,發佈一些代碼,以便我們可以看到它。 – 2015-01-09 22:49:41

回答

0

它不工作的原因是因爲你重定向start命令的輸出到日誌文件,而不是Java程序。 start命令實際上並沒有產生任何輸出,所以你的日誌文件是空的。

如果您從批處理文件中省略了start命令,並且只使用javaw ...命令,則日誌文件將包含正確的內容。

爲了您的目的,我不認爲start命令甚至是需要的。

通過將/B開關添加到命令中,您可以使用start啓用命令的重定向,該命令本質上不會創建用於啓動進程的新窗口。它有限制,即shell將不再終止Ctrl+C上的應用程序,但您的應用程序可以在必要時處理它。

start幫助:

B

 Start application without creating a new window. The 
     application has ^C handling ignored. Unless the application 
     enables ^C processing, ^Break is the only way to interrupt 
     the application. 

更改您的命令:

start /B javaw -jar InterceptorProcess.jar > logger.log 2>&1 

,你應該得到正確的日誌內容。

+0

Hello @Ryan ,如果我不使用「開始」,只有「javaw ..」控制檯顯示自己 – Nico 2015-01-12 12:26:56

+0

@Nico你是如何執行你的腳本?雙擊瀏覽器? – 2015-01-12 17:49:23

+0

是的!雙擊! – Nico 2015-01-12 20:55:24

0

雖然瑞安的回答解釋了問題的原因,他並沒有解釋該解決方案:

start javaw -jar InterceptorProcess.jar ^> logger.log 2^>^&1 

start "" "javaw -jar InterceptorProcess.jar > logger.log 2>&1" 
+0

你好@Aacini,謝謝你的回答,但我無法解決問題。你的第一個命令有效,但是「logger.log」沒有被寫入,因此它和我的原始命令有相同的比較。你的第二個命令給出了一個錯誤:「Windows無法找到文件」javaw -jar InterceptorProcess.jar> logger.log 2>&1「。確保名稱被正確寫入並再次嘗試」。 – Nico 2015-01-12 12:33:05

-1

你明確地說:「我想執行這個java程序,看看JFrame而不是控制檯「。

也許你想要做的只是以不顯示控制檯的方式啓動.jar文件?如果是這樣,只要你創建可執行的.jar的正確方法:

Create a manifest file and your jar file: 
C:\mywork> echo Main-Class: InterceptorProcess >manifest.txt 
C:\mywork> jar cvfm InterceptorProcess.jar manifest.txt *.class 
or 
C:\mywork> jar cvfe InterceptorProcess.jar InterceptorProcess *.class 

as long as your Windows file assocation for .jar is ok,然後將推出無殼,如果你雙擊它。

+0

你好@djangofan。謝謝你的回答,但Ryan J的解決方案就是我一直在尋找的。 – Nico 2015-01-13 13:49:44

相關問題