2013-09-11 69 views
1

我有兩個文件:MyStringLog.java(它擴展了ArrayStringLog)和TestDriver.java在同一個目錄中。爲什麼TestDriver.java不能從MyStringLog類中識別MyStringLog構造函數?在TestDriver.java我宣佈:Java無法從同一目錄中的.class中找到符號

MyStringLog animals = new MyStringLog("animals"); 

據說這是爲了建立一個名爲動物新MyStringLog對象,但我得到2個錯誤,當我編譯,兩者是MyStringLog符號沒有找到。

+0

您是否正在使用導入語句導入'MyStringLog'? – vandale

+0

我想你需要將這個當前目​​錄添加到類路徑中。就像添加「-cp」一樣。到命令行。 –

+0

你說他們在同一個目錄中,但是他們是否有相同的包? –

回答

1

我得到這個粗略的工作。這樣做...

爲文件ArrayStringLog.java,我刪除了implements StringLogInterface,因爲我根本無法訪問該接口。這樣做後,我刪除了package ch02.stringLogs;。當我整理與package...仍然存在這個文件,我收到了錯誤:Exception in thread "main" java.lang.NoClassDefFoundError: ArrayStringLog (wrong name: ch02/stringLogs/ArrayStringLog)

然後在MyStringLog.java,我刪除了import ch02.stringLogs.*;。然後我保存並編譯了代碼,然後運行TestDriver,我沒有收到編譯錯誤。

這使我相信你的錯誤源於ArrayStringLog.java中的package聲明。


,最終得到的彙編,我把所有的四個文件(ArrayStringLog,MyStringLog,StringLogInterface,TestDriver)到同一個目錄,刪除任何package...陳述,加回implements StringLogInterface到ArrayStringLog.java,編譯每一個,然後跑TestDriver具有添加toString方法從其中輸出是:

Log: animals 

1. dog 
2. cat 

這裏是試驗駕駛員:

public class TestDriver { 
    public static void main(String[] args) { 
     MyStringLog animals = new MyStringLog("animals"); 
     animals.insert("dog"); 
     animals.insert("cat"); 

     System.out.println(animals.toString()); 
    } 
} 

要明確,ArrayStringLog開始:

public class ArrayStringLog implements StringLogInterface 
+0

哎呀,這是一個錯字發佈在這裏。我的文件沒有錯別字。 – Van

+1

請注意,上述評論是迴應我以前的答案,不再適用。 – JohnZ

+0

https://www.dropbox.com/s/6koo8eim16xcskb/bookFiles.zip這些是我們正在使用的所有文件。我看着一個編譯好的同學代碼,他們不需要觸碰ArrayStringLog.java。 – Van

0

嘗試加入import MyStringLog;到您的文件。

您還在使用軟件包嗎?在這種情況下它應該是import <package_name>.MyStringLog;

+0

這給了我錯誤「TestDriver.java:1:error:'。」預計導入MyStringLog;「箭頭指向分號。 ArrayStringLog類位於ch02.stringLogs包中,該包由MyStringLog.java導入。 – Van

+0

使用'import ch02.stringLogs.MyStringLog;'然後 – vandale