2013-10-17 162 views
19

我已閱讀之前發佈的問題。有些是模糊的,沒有解決我的問題,所以我不得不再次問。從命令行運行java包

我有兩個簡單的類,

package One; 
import One.Inner.MyFrame; 
public class test 
{ 
    public static void main(String args[]) 
    { 
     MyFrame f= new MyFrame(); 
    } 
} 

而其他類,

package One.Inner; 
import java.awt.*; 
import javax.swing.*; 

public class MyFrame extends JFrame 
{ 
    public MyFrame() 
    { 
     setPreferredSize(new Dimension(400,560)); 
     setVisible(true); 
    } 
} 

我在Windows CMD是在基本文件夾 「基本」。我編譯使用

basic> javac *.java -d . 

創建文件夾和子文件夾。

cd One 
basic\One> java test 

這產生了一大組錯誤。許多答案指出了沒有工作的完整路徑。 我的課程是在一個所以指定一個使用-cp也沒有工作。

回答

35

你會運行它:

java One.Test 

...但是從目錄(basic),不是從One目錄。您始終指定完全合格的類名稱。在Java中

哦,包名應該是小寫,所以它應該是oneone.inner,不OneOne.Inner。只是一個約定,但幾乎每個人都遵循。

+0

它必須完成的目錄非常重要,我早點弄錯了.TY ....注意到了。我有一種錯覺,認爲只有木包裝內包裝必須很小。 – user2756339

+0

有沒有辦法從同一目錄運行它?例如通過命令行選項指定一個工作目錄?我爲此尋找了很多,每個人都說「只需要一個目標」,但在某些情況下真的很煩人。 –

+0

呵呵,這裏是:'java -cp ../ one.Test'。我確信我以前嘗試過。 –

11

如果目錄是:

從封裝的基本目錄
basic\One 

運行Java:

basic>java One.test or basic>One.test <optional arguments> 

(理想的包將是小寫和類大寫):

basic>java one.Test 

如果您收到'不存在'消息,那麼java命令找不到您引用的類在你的班級。您可以使用-cp選項指向它們('。'表示'here',並且您可以添加儘可能多的位置,如Windows中的';'和Linux上的':')。

basic>java -cp . one.Test 
or 
basic>java -cp .;..\..\someJar.jar;c:\someDirectory\classesDirectory one.Test 
+0

帶-cp標誌的示例很有幫助。 +1 – binarysubstrate

+0

謝謝,它的幫助。 –

1

,同時創造一個包中的類,如果你想從CMD您必須創建一個目錄與包同名放的.class在運行它,然後你可以輕鬆地運行它,例如,你創建了一個類名「一」和這個類的包名包,你必須one.java
編譯後生成一個名爲包的目錄運行這些命令

1的javac,之後運行此命令
2 java包。一個
注意:
所有這些都必須在當前工作目錄中完成,名稱「one」我在這裏選擇它作爲文件名和主類名稱 我們都知道第一個命令中使用的名字是文件名和第二個是主類名稱

+0

您應該使用格式化來減輕對答案的理解。 –

1

這是因爲如果你在你的java文件中聲明瞭,那麼JAVA編譯器相信你的系統中有相同的文件夾結構。 在你的情況Java編譯器尋找一個包作爲包,然後test.class。,或非常具體只是看看你的.class文件,你可以看到它尋找什麼路徑。請看看下面的圖像(我我來說,我使用您好,測試儀)

.class

正如你可以看到圖像路徑你好/測試儀(我的案例),所以建築應該像Hello- >測試儀。

如果你沒有相同的體系結構,並且希望在編譯時創建它,請使用javacp命令。