2010-04-21 74 views
0

我創建了一個程序,它或多或少地將一個字符串數組作爲對象並隨機打印一個。我的.jar文件不會做任何事情

所以basicaly

class Fun 
{ 


     string[] namestrings = new string[#] 

     constructor() 
     { fill with some strings} 

     public static void main (String[]arg) 
     { 
      create instance of class 
      do some junk with it 
      method that prints it 
     } 
     method that prints it {} 
     another method 
    } 

當我編譯和命令行上運行它,它工作正常,但當在COMAND行我jar -cf Happy.jar Fun.class

鍵入我會得到一個名爲.jar文件和快樂時我點擊它,我得到一個錯誤消息,讀取「的Java Jar文件快樂無法啓動閱讀可能的錯誤消息CONSOL」我有一個Mac我正在運行Lepord,如果這使差異。這是怎麼回事?

回答

3

有以下內容的MANIFEST.MF,並將其打包到你的JAR文件中META-INF/MANIFEST.MF

Manifest-Version: 1.0 
Ant-Version: Apache Ant 1.7.1 
Created-By: 14.3-b01 (Sun Microsystems Inc.) 
Main-Class: Fun 

然後,您可以使用執行應用程序

java -jar Happy.jar 

IDE通常會自動爲您執行此操作,如果您將項目創建爲Java應用程序。

0

您的命令中不需要.class文件。因此:

java -jar Happy.jar Fun 
+0

然後我得到一個錯誤,說Funn:沒有這樣的文件在學術搜索 – David 2010-04-21 05:05:06

+0

你的課是快樂的,所以你需要指定它作爲類運行。假設你的jar文件實際上叫做Happy.jar,應該這樣做。 – anger 2010-04-21 05:07:32

+0

如果我不在名稱中包含Fun,它將如何知道從Fun.class文件獲取信息?也爲什麼不說你編輯了你的文章? – David 2010-04-21 05:07:43

2

您還可以在JAR的清單中添加Main-Class屬性。那麼你可以這樣做

java -jar Happy.jar 

請參閱this

+0

你能解釋嗎? – David 2010-04-21 05:09:42

+0

您將FQCN設置爲Main-Class屬性。然後將清單添加到jar文件中。當你使用'java -jar Happy.jar'來運行你的文件時,虛擬機會查看META-INF/manifest.mf來找出'main'方法的類是什麼,然後執行它。請參閱上面的鏈接 – 2010-04-21 05:36:35

1

您需要告訴.jar文件運行時它將執行哪個類。

在你的情況聽起來很愚蠢的,因爲你只有一類,但功能齊全的Java應用程序可能有數百人。

你做到這一點是通過添加名爲manifest您告訴罐子的特殊文件的方式,嘿,這是你應該運行的類。

那麼試試這個:

// HelloWold.java 
// you know 
public class HelloWorld { 
    public static void main(String [] args) { 
     System.out.printn("Look, I'm running"); 
    } 
} 

保存它HelloWorld.java

編譯

$javac HelloWorld.java 

創建manifest.mf文件絲毫此內容:

Main-Class: HelloWorld 

和包裝在一起。

$jar -cmf manifest.mf yourJar.jar HelloWorld.class 

創建了一個名爲yourJar.jar的文件。

現在,如果您雙擊它,它將運行,但它會在瞬間消失了,你可以在命令一樣通過鍵入運行它:

$java -jar yourJar.jar 

,並會出現在控制檯的消息。

我希望這會有所幫助。