所以这是我的游戏......
import javax.swing.JFrame;
public class Main extends JFrame {
//the parts of the game like the parts in a desktop
public void Skeleton() {
//entry point of the game
add(new Board());
// sets the title
setTitle("Skeleton");
// makes it safe for the program to close without leaks
setDefaultCloseOperation(EXIT_ON_CLOSE);
//sets the size
setSize(300, 280);
//sets the location
//null means middle
setLocationRelativeTo(null);
//set the window to be visible
setVisible(true);
//allows the window to be resized if the statement is true
setResizable(false);
}
//wraps everything up
public static void main(String[] args) {
new Skeleton();
}
}
new Skeleton();
出错,错误显示
无法将骨架解析为类型
答案 0 :(得分:2)
您的Skeleton
是method,而不是class。只能实例化类。我相信你要做的就是:
public static void main(String[] args) {
Main mainFrame = new Main();
mainFrame.Skeleton(); // I assume you were trying to ultimately call this method.
}
附注:在Java中,标准是以小写字母开头的方法,因此Skeleton
应为skeleton
。从技术上讲,两者在语法上都是有效的,但正如我所说的那样,后者是标准的,它使得其他人(甚至你自己)更容易看到你的代码,在遵循标准时快速阅读和理解它。实际上,我发现当你混合这样的案例时,很难知道你何时查看一个类,方法或对象。
编辑:正如JasonC指出的那样,StackOverflow语法高亮显示器在出现不正确的情况时会感到非常困惑,这与我在上一段中提到的情况相符,这使得其他人阅读起来更加困难(特别是一目了然)。
答案 1 :(得分:2)
您似乎正在尝试为班级定义constructor;但构造函数不应该具有返回类型,并且必须与封闭类的名称相同。您可以将类名从Main
更改为Skeleton
并修复构造函数语法,例如:
public class Skeleton extends JFrame { // <- name changed
public Skeleton () { // <- no 'void'
...
}
public static void main(String[] args) {
Skeleton s = new Skeleton();
// do stuff with 's'
}
}
你可以做同样的事情,但保留名称Main
:
public class Main extends JFrame {
public Main () { // <- no 'void'
...
}
public static void main(String[] args) {
Main m = new Main(); // <- use 'Main' not 'Skeleton'
// do stuff with 'm'
}
}
或者您可以不使用构造函数并保持代码不变,而是将Skeleton()
作为实例方法调用,如此处的其他答案所示,例如:
public class Main extends JFrame {
public void Skeleton () {
...
}
public static void main(String[] args) {
Main m = new Main();
m.Skeleton(); // <- `Skeleton()` is an instance method
// do stuff with 'm'
}
}
...但是查看你的代码(通常是在构造函数中完成这种工作)并猜测你的new Skeleton()
意图,看起来上面的构造函数示例之一就是你想要的。在构造之后在单独的方法中执行初始化通常不是最好的处理方式(有时候这种情况很有用,但是大多数情况下它会使代码更清晰,更清晰,并避免可能的错误,例如忘记初始化类在你构建之后)。
答案 2 :(得分:1)
如Jason C
和Paul Richter
所述,Skeleton是method
而不是class
,因此您无法初始化Skeleton()
。因此,要么将您的班级更改为Skeleton
,要么创建Main
的对象并调用该方法。我只是想添加一个使用SwingUtility.invokeLater()
来调用所有swing的东西,这样你就可以做到这样的事情。
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Main frame = new Main();
frame.Skeleton();
}
});
}
答案 3 :(得分:0)
new Main().Skeleton();
^^^^^ ^^^^^^^^^
Class Name instance method.
你最需要写的东西。
Skeleton
是一种公共方法,您可以通过该类的实例进行访问。在java new <className>()
中创建该类的新对象。
代码段:
Main main = new Main();
main.Skeleton();