2017-02-21 43 views
1

我想开始学习关于java中的GUI。但是,当我尝试从教程网站将简单的JFrame代码复制到Textpad并且尝试编译它时,出现错误:Java GUI方法错误

“C:\ Programming \ Java \ Practice GUI \ GUIPractice.java:7 :错误:无效的方法声明,返回类型需要 公共MyFrame(){ ^ 1错误”

也会发生这种情况时,我也从其他网站复制简单的GUI代码,似乎是什么问题?我知道一个方法必须是无效的或返回类型,但为什么该方法不指定是否为void或返回类型,一个数据类型?这似乎是其他网站的GUI代码的语法。

下面是代码:

// file: EmptyFrame.java 
// Adapted from Core Java, vol.1, by Horstmann & Cornell 

import javax.swing.*; 

class MyFrame extends JFrame { 
    public MyFrame() { 
    setTitle("My Empty Frame"); 
    setSize(300,200); // default size is 0,0 
    setLocation(10,200); // default is 0,0 (top left corner) 
    } 

    public static void main(String[] args) { 
    JFrame f = new MyFrame(); 
    f.show(); 
    } 
} 

我试图与NetBeans IDE和同样的错误出现。 什么似乎是问题?

+0

应该正常工作。程序中没有错误 –

+0

这个“方法”实际上是一个构造函数,因此没有返回类型。但是:构造函数需要像你的类一样命名。您的命名似乎存在一些混淆:错误在名为“GUIPractice.java”的文件中报告,您的源代码给出“file:EmptyFrame.java”,该类实际上称为“MyFrame” - 现在是正确的文件名和类名? –

+0

对于混淆,我很抱歉,但我直接从网站复制了代码,实际上我在编译到Textpad时将其重命名为类名。 – JPAsensi

回答

1

你的类被称为MyFrame,但它在一个名为EmptyFrame.java的文件中。他们需要是同一个名字。因为它们不同,它认为MyFrame()是一种方法。

+0

他们只需要命名相同,如果该类是公开的(其中类是不是) –

+0

但是,然后他会从一个静态方法(即静态void main())得到一个错误,这是只允许在顶级课程中。 –

+0

当然,一个静态方法只允许在顶层类中使用。但顶级类可以是公共的,受保护的或者只有包可见。如果类是公共的,类名只需要匹配文件名。 –

0

将GUIPractice.java更改为MyFrame.java或将类名和构造函数更改为GUIPractice。

+0

对于混淆,我很抱歉,但我直接从网站复制代码,实际上我在编译到Textpad时将类名重命名。 – JPAsensi

0

在每个.java文件中,必须有一个与文件名同名的类,否则将在运行时抛出一个ClassNotFoundException。你看到的错误很奇怪。我不知道为什么它抱怨构造函数的返回类型。

只需重命名您的文件,使其具有与该类相同的名称即MyFrame.java。你也可以让你的课程public

+0

您可以提供一个链接,说明这个要求吗?据我所知,只有公共类需要驻留在具有相同名称的文件中。 (虽然最好的做法是将类放在类似命名的文件中,但只需要公共类) –

+0

我刚刚对它进行了测试,抛出了一个'ClassNotFoundException'。 @ThomasKläger – Sweeper

+0

对于混淆,我很抱歉,但我直接从网站复制代码,实际上我在编译到Textpad时将类名重命名。 – JPAsensi

0

问题实际上是自从我将代码复制到Textpad后,我将类名重命名为GUIPractice以匹配文件名。但是,我不知道包含GUI代码的方法实际上不是方法,而是构造函数。 但是,让我感到困惑的是为什么构造函数应该和类名称一样。

+0

那么,那就是构造函数是如何命名的。 [Java Language Specifiction](http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8)指出:** ConstructorDeclarator中的SimpleTypeName必须是简单的包含构造函数声明的类的名称,或发生编译时错误** –

+0

谢谢,实际上,我不知道这一点,因为我们仍然在我们班的Methods中。谢谢 – JPAsensi