2015-12-06 15 views
0

我一直在Sublime 3上試圖學習更多Java API的2D遊戲教程,我被困在了一個我找不到的編譯錯誤中。如何在Java中手動管理項目包?

error: cannot find symbol 
    add(new Board()); 
      ^

我從工作的教程是http://zetcode.com/tutorials/javagamestutorial/basics/

的兩個階層的我有如下

package com.zetcode; 

import javax.swing.JPanel; 

public class Board extends JPanel{ 

    public Board() {} 
} 

package com.zetcode; 


import java.awt.EventQueue; 
import javax.swing.JFrame; 

public class Application extends JFrame{ 

    public Application() { 
     initUI(); 
    } 

    private void initUI(){ 

     add(new Board()); 

     setSize(330, 330); 

     setTitle("App"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
    } 

    public static void main(String[] args){ 

     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run(){ 
       Application ex = new Application(); 
       ex.setVisible(true); 
      } 
     }); 
    } 
} 

我知道這個問題是我的包聲明,但我不知道爲什麼。我仔細閱讀了關於此問題的文檔(https://docs.oracle.com/javase/tutorial/java/package/usepkgs.html),並試圖將軟件包名稱更改爲package gametest,並將我的java源代碼粘貼到名爲gametest的目錄中,但Javac仍然不知道Board()在Application類中。

+0

你是否設置了類路徑進行編譯? – Jan

+0

當我嘗試'javac -classpath ...'時,它仍然會說同樣的錯誤,如果我正確地做了這件事。 – GhostRavenstorm

+0

你能分享你的設置嗎?調用javac時你在什麼文件夾?包/文件夾com.zetcode相對於那個在哪裏? – Jan

回答

0

想象一下,你有這個文件夾結構:

/somewhere 
/somewhere/com 
/somewhere/com/zetcode/ 
/somewhere/com/zetcode/Board.java 
/somewhere/com/zetcode/Board.class 
/somewhere/com/zetcode/Application.java 

現在這取決於你在哪裏,你的類路徑(這是在哪裏可以找到其他類)必須設置不同。例如,這些將是有效的:

/somewhere:>javac com/zetcode/Application.java 
/somewhere/com/zetcode:> javac -cp ../../ Application.java 

注意如何classpath中引用到com所在的目錄。因爲由於包的結構,javac/java將遍歷到與包名匹配的子目錄。