2016-01-08 42 views
-1

當我創建一個可運行的jar文件時,它在執行java -jar Test.jar後工作,但是當我製作一個普通的jar文件並執行腳本時,黑色命令窗口會打開一秒鐘,但它會關閉立即。確保沒有通過雙擊運行一個罐子

那麼我怎樣才能製作一個jar文件,我可以通過java -jar Test.jar運行,但不是通過雙擊它呢? 我需要確保jar /程序只能通過我的「正式」提供的啓動程序批處理來調用。

+2

因爲它不可運行。你有問題嗎? – Reimeus

+1

你自己說過 - 'runnable' jar-可以運行,不可運行 - 不能。就這麼簡單 –

+0

@已綁定我不想被雙擊運行 – LoveJavaTwo

回答

1

你基本上試圖做的是防止你的.jar文件被雙擊它來調用。

雙擊罐子並運行它與java -jar是相同的,它很難區分/檢測。但是,正如你已經使用批處理打電話給你的程序,你可以做這樣的事情:

@echo off 
java -jar foo.jar OK! 

所有您需要做的就是檢查是否給出這個信號,同時啓動程序:

public static void main(String[] args) { 
    if (args.length > 0 && args[0].equals("OK!")) { 
     System.out.println("Everything fine"); 
    } else { 
     System.exit(0); 
    } 
} 

這將確保您可以檢測您的程序是如何啓動的。也許最好給用戶一些理由,如果沒有從批處理中調用,你退出程序的原因。

請注意,這不會讓「惡意」用戶創建他們自己的批處理,因爲您無法隱藏他們的信號。

另一種方法是創建一個常規的罐子,並指定正常的運行的JAR創建的清單會做信息:

@echo off 
java -cp foo.jar org.your.package.MainClass 

但我更喜歡第一種方法,因爲我認爲這是更方便,更userfriedly因爲你可以向他們提供信息。

+0

爲什麼我得到太多的回票:( – LoveJavaTwo

+1

@LoveJavaTwo這並不是很多downvotes。有些人吸引10 +在5分鐘內降低效果;-)我認爲問題在於你只提供了90%的信息。 _你確實知道你爲什麼要這麼做,但是你沒有透露這件事。 – Marged

0

我認爲最簡單的方法就是把

if (args.length == 0) 
    System.exit(0); 

main(String[] args) 

方法的開始。 然後運行程序的唯一方法是從命令行輸入一些參數(無所謂)。