2017-07-11 141 views
-1

這是有史以來最愚蠢,最簡單的問題,但是我做錯了什麼?Java編譯/包/命名空間錯誤

在目錄結構稱爲

com/myname/robos 
    - Robo.java 
    - Arena.java 

Robo.java:

package com.myname.robos; 

public class Robo { 
    public void fala() { 
    System.out.println("Gleep Beep Boop!");  
    } 
} 

Arena.java:

package com.myname.robos; 

import com.myname.robos.Robo; 

public class Arena { 

    public static void main(String[] args) { 
     Robo r2 = new Robo(); 
     r2.fala(); 
    } 
} 

當我嘗試:

javac Robo.java 
01編譯

當我再嘗試

javac Arena.java 

我得到

Arena.java:3: error: cannot find symbol 
import com.myname.robos.Robo; 
          ^
    symbol: class Robo 
    location: package com.myname.robos 
Arena.java:8: error: cannot find symbol 
     Robo r2 = new Robo(); 
     ^
    symbol: class Robo 
    location: class Arena 
Arena.java:8: error: cannot find symbol 
     Robo r2 = new Robo(); 
        ^
    symbol: class Robo 
    location: class Arena 
3 errors 

我知道這是有關目錄/包之間的不兼容的錯誤等名稱。

但我仍然沒有得到這個權利。 應該我在寫什麼?

+2

'javac com/myname/robos/Robo.java','javac com/myname/robos/Arena.java',並且將'classpath'和'sourcepath'選項讀爲' javac'。 –

+0

我必須從路徑之外運行編譯器嗎? – interstar

+0

您必須以保留路徑的方式運行它。閱讀精細手冊。它記錄瞭如何使用'javac'。閱讀精細手冊。 –

回答

0

你需要確保你的文件在相同的結構,你的包參考,說:

如果你的.java文件是例如在../Desktop你必須創建一個名稱的文件夾:COM,MYNAME和robos然後粘貼在那裏,所以你的文件將在../Desktop/com/myname/robos裏面。

然後你只需要編譯Arena.java並運行它:

$ javac的COM/MYNAME/robos/Arena.java

$ java的COM/MYNAME/robos /競技場

定位你在裏面../Desktop

+0

不知道你指明的路徑是什麼,但最好不要從包裝層次結構中的「javac」深處看,正如你似乎可能指出的那樣。您想從包層次結構的根目錄編譯或使用'classpath'和/或'sourcepath'選項來設置它。這個答案不正確。 –

+0

好吧,你是對的,編輯。您可以從包層次結構的根目錄進行編譯,但是,在這種情況下,需要在javac命令中建立層次結構本身。 – DKnight00

+0

'java'需要一個完全限定的類名作爲參數,而不是文件系統路徑。你在這些命令開始時用「../ Desktop」表示什麼?這不應該是命令的一部分。你在發佈之前運行你的例子嗎? –

相關問題