2011-04-05 47 views
1

我是新來的Java。我剛剛使用NetBeans創建了我的第一個Java應用程序。這裏的源代碼:如何打開* .jar文件?它與Windows的。* exe相同嗎?

package helloWorld; 


public class Main { 

    public static void main(String[] args) { 

     System.out.println("What's your name, sparky? =]"); 
     String sparkysName = System.console().readLine(); 

     System.out.println("Was that so hard, " + sparkysName + "? =P"); 

    } 

} 

編譯後我有的HelloWorld.jar文件。而這纔是我的僞問題...

  1. 爲* .jar擴展名類似的* .exe的Windows,只是爲Java(將在任何平臺上運行的Java就可以了)?

  2. 我可以運行我的的HelloWorld.jar,但它停留在屏幕上只是0.1秒,所以我什麼都看不到......我想有一個錯誤。我怎樣才能解決它(NetBeans不會抱怨,我可以編譯它)?

編輯#1:

在我的* .jar文件裏面我有Main.class擁有的main()。所以這不是問題。 我才發現,原來它試圖告訴我是這樣的:在線程「主要」 java.lang.NoClassDefFoundError

例外...

回答

1

您可以雙擊執行它,但如果您使用像Swing或AWT這樣的UI框架,用戶將只能看到任何結果。

在你的情況下,System.out.printlns和System.console()。readLine()只能通過命令控制檯進行交互。

+0

你喜歡像我這樣的新手會喜歡什麼? Swing或AWT? – daGrevis 2011-04-05 17:30:14

+1

Swing,AWT GUI庫僅用作Swing時下的基礎 – Puce 2011-04-05 17:37:16

+0

Swing,明確地說 – 2011-04-05 17:47:51

0

是的,你可以在你雙擊。 jar打開它,如果安裝了java並且在PATH中,或者運行cmd中的java -jar "jar_path"。而且,它不會停止,因爲執行是在最後一條指令後完成的,因此它會退出。我不記得確切的語法,但嘗試讀取用戶的密鑰。它會暫停你的程序,直到你按下一個鍵。

編輯:我認爲System.in.read();是你在找什麼。

+0

,只是從現有的命令提示符下運行教程。 – delnan 2011-04-05 17:27:26

0

.jar文件使用標準Zip壓縮格式。你可以打開任何可以打開Zip文件的jar文件。 (WinZip,WinRar,7-zip等)。

+0

我不會談論* .jar作爲歸檔文件。再次閱讀我的問題! – daGrevis 2011-04-05 17:31:36

+0

對不起,我試圖回答你關於Windows上的.jars和.exes的問題,但我認爲我們在不同的頁面上。 – 2011-04-05 19:30:50

1
  1. jar是java的檔案。與.exe不同,它不能在處理器上執行,而是在JVM上執行。因此,執行jar文件的實際命令是java -jar jarfilename,這意味着您可以使用jar文件作爲參數調用java虛擬機。

  2. 這是因爲它不等待任何東西,它只是打印兩行並退出。如果你從命令行運行它,你會看到。如果程序的執行長/程序等待某些輸入,它不會被關閉,那麼快

+0

我會補充說,並非所有的JAR文件都可以用這種方式執行。只有包含包含Main-Class條目的可選MANIFEST.MF文件的文件。 – 2011-04-05 17:31:53

+0

@Kris - 謝謝你 – MByD 2011-04-05 17:34:21

0

所有jar文件的第一個是普通的Zip文件,這樣你就可以用能夠任何程序打開它打開zip文件 - 看裏面。

要從Jar文件運行代碼,您需要在清單文件中命名主類:在特殊位置使用特殊格式的特殊文件。 JDK/JRE在該文件的Jar文件內查找並運行指定的類。

Google for MANIFEST.MF。

0

jar文件只是將所有Java文件壓縮在一起。您可以選擇應用程序的所有文件並將它們放入jar文件中。但是jvm能夠執行一個jar文件。爲此,您需要指定哪些java文件(駐留在jar中)具有主要方法。這必須在創建jar時完成。

因此,一個jar文件可以在任何安裝了JVM的平臺上運行。在你的情況下,你看不到命令​​行,因爲你只是顯示一些東西,當程序結束時,命令行消失。因此,嘗試這樣做:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
int i = br.readLine(); 

在文件的結尾,你可以看到在命令行沒有被終止,等待你的輸入。它在c或C++應用程序中以相同的方式工作,其中命令行將消失,除非您有getch()或類似的東西。

供您參考,您對如何或者創建和運行Jar文件here.