2014-03-27 64 views
0

我寫了一個在後臺運行的java程序。它工作正常,它可以等待它。 我在Windows中編寫了一個bat文件來運行它。爲什麼java程序在應用程序完成時沒有關閉?

@echo off 
start .\jre7\bin\java.exe -jar ".\my_jar.jar" 
exit 

當我運行這個文件.bat我可以看到它任務管理器和它的工作原理,當它結束時,java.exe的過程是在任務管理器關閉。 它適用於鰭的Windows 但是當我在sh文件在Linux上運行它,它 Java程序工作正常,因爲它做什麼,我從它等待,但對系統正監視的java過程不關閉。我想讓它像Windows一樣靠近。 在sh文件中:

export JAVA_HOME="/app/myfolder/java/jre1.7.0_51" 
export I_HOME="/app/myfolder/code" 

cd $I_HOME 

$JAVA_HOME/bin/java -jar my_jar.jar 
RStat=$? 

什麼問題?

回答

1

您也可以終止與應用:

System.exit(0); 
+0

我沒有調用* System.exit(0)*,但爲什麼我需要它,因爲在Windows中消失時,應用程序完成? –

0

你把線程設置爲守護進程嗎?

public final void setDaemon(boolean on) 

從JavaDoc的:

將該線程標記爲守護線程或用戶線程。 Java虛擬機退出時正在運行的線程都是守護線程

+0

感謝您的回答,我不明白我可以在哪裏設置它,我不設置它。並在Windows中運行,但在Linux中它表現不同,是否正常 –

+0

什麼是「你的線程」?你當然不希望主線程是守護進程。但是,知道OP是否有任何額外的非守護線程運行 - 但爲什麼只在Linux上呢? –

1

它絕對不正常的表現優雅的窗口,而不是終止在Linux 。 由於您使用的任何本地庫的差異,您的jar可能只是掛在linux上,您是否嘗試過調用System.exit()?

+0

我沒有調用* System.exit()?*但爲什麼我需要它,因爲在Windows中消失時,應用程序完成? –

+0

有很多原因會導致你需要它。最常見的情況是一個大型或複雜的應用程序,其中有許多線程需要在應用程序級別關閉,因爲它們彼此之間可能沒有洞察力。否則,這只是一個好習慣,你應該在應用程序應該正常終止的地方調用System.exit(0),否則定義錯誤代碼。 java -jar不可能掛在linux上,而不能掛在windows上,它是掛在你的jar上的。 – rpg711

相關問題