當我創建一個可運行的jar文件時,它在執行java -jar Test.jar
後工作,但是當我製作一個普通的jar文件並執行腳本時,黑色命令窗口會打開一秒鐘,但它會關閉立即。確保沒有通過雙擊運行一個罐子
那麼我怎樣才能製作一個jar文件,我可以通過java -jar Test.jar
運行,但不是通過雙擊它呢? 我需要確保jar /程序只能通過我的「正式」提供的啓動程序批處理來調用。
當我創建一個可運行的jar文件時,它在執行java -jar Test.jar
後工作,但是當我製作一個普通的jar文件並執行腳本時,黑色命令窗口會打開一秒鐘,但它會關閉立即。確保沒有通過雙擊運行一個罐子
那麼我怎樣才能製作一個jar文件,我可以通過java -jar Test.jar
運行,但不是通過雙擊它呢? 我需要確保jar /程序只能通過我的「正式」提供的啓動程序批處理來調用。
你基本上試圖做的是防止你的.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因爲你可以向他們提供信息。
爲什麼我得到太多的回票:( – LoveJavaTwo
@LoveJavaTwo這並不是很多downvotes。有些人吸引10 +在5分鐘內降低效果;-)我認爲問題在於你只提供了90%的信息。 _你確實知道你爲什麼要這麼做,但是你沒有透露這件事。 – Marged
我認爲最簡單的方法就是把
if (args.length == 0)
System.exit(0);
在
main(String[] args)
方法的開始。 然後運行程序的唯一方法是從命令行輸入一些參數(無所謂)。
因爲它不可運行。你有問題嗎? – Reimeus
你自己說過 - 'runnable' jar-可以運行,不可運行 - 不能。就這麼簡單 –
@已綁定我不想被雙擊運行 – LoveJavaTwo