2011-02-17 69 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,并且您应该很好。

相关问题