2011-02-17 112 views
1

我已經編寫了下面的代碼,但不斷地得到'非靜態方法getText()不能從靜態上下文中引用「的錯誤。非靜態方法getText()不能從靜態上下文中引用

有人可以幫助我在正確的軌道上嗎?

public class ISBNText extends JTextField 
{ 
    protected static String bookNum; 
    protected JTextField bookText; 
    public ISBNText() 
    { 
     super(20); 
     bookText = new JTextField(); 
    } 
    public String getISBN() 
    {   
     String bookNum = ISBNText.getText(); 
     return bookNum; 
    } 
    private String validateISBN(String bookNum) 
} 
+0

此URL可能有助於解釋此(和其他)編譯時間消息。 http://mindprod.com/jgloss/compileerrormessages.html#NONSTATICCANTBEREF – mwilson

+0

您希望使用哪種文本,「this」(ISBNText對象)還是bookText中的文本?另外,爲什麼你有一個JTextField子類創建另一個JTextField作爲成員?這似乎很奇怪。 –

+0

我不知道,我同意這看起來很奇怪。家庭作業可能很奇怪。我幾乎從字面上寫下了任務要求的內容,我相信我已經按照要求的方式完成了任務。 – unit

回答

12

這條線:

String bookNum = ISBNText.getText(); 

應該僅僅是:

String bookNum = getText(); 

這是含蓄:

String bookNum = this.getText(); 

呼叫ISBNText.getText()試圖調用它,彷彿它是一個靜態方法 - 即assoc與該類型相關聯,而不是與該類型的任何特定的實例相關聯。這顯然沒有意義,因爲文本與該類型的實例關聯。我向您展示的兩種替代方案是等效的,找到已調用getISBNISBNText的文本。

+0

哦.........謝謝。 270K?哇。那麼究竟是什麼(除了錯誤),String bookNum = ISBN.getText();做?爲什麼會導致靜態錯誤被拋出? – unit

+3

@unit:當您使用類名稱(如ISBNText)插入方法(或變量)時,編譯器認爲您正在嘗試引用靜態方法。如果存在同名的非靜態元素,則會出現您遇到的錯誤。 –

3

你打電話getText就好像它是靜態的。在您的getISBN方法中從其前面刪除ISBNText

它看起來像你也冗餘實例化一個額外的JTextField。你寫類是一個JTextField,你並不需要你創建額外的一個:

protected JTextField bookText; // get rid of this 
public ISBNText() 
{ 
    super(20); 
    bookText = new JTextField(); // and this 
3

方法getText()也不是一成不變的,應在對象的實例調用。

public String getISBN() 
{   
    String bookNum = this.getText(); 
    return bookNum; 
} 
1

我相信你的問題是你打電話給ISBNText.getText(),但getText()方法不是一個靜態方法。只需從該通話開始時刪除ISBNText,並且您應該很好。

相關問題