这是我提供问题的代码。
package ca.rhinoza.game;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Dimension;
import javax.swing.JFrame;
public boolean running = false;
public class Game extends Canvas implements Runnable {
private static final long serialVersionUID = 1L;
public static final int WIDTH = 160;
public static final int HEIGHT = WIDTH / 12 * 9;
public static final int SCALE = 3;
public static final String NAME = "Game";
private JFrame frame;
public Game(){
setMinimumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
setMaximumSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
setPreferredSize(new Dimension(WIDTH*SCALE, HEIGHT*SCALE));
frame = new JFrame(NAME);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(this, BorderLayout.CENTER);
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public synchronized void start(){
new Thread(this).start();
}
public synchronized void stop(){
}
public void run() {
}
public static void main(String[] args){
new Game().start();
}
}
我不知道为什么会这样做。
修改 我根据您的要求编辑了更多代码。
答案 0 :(得分:17)
你在课堂外声明一个字段:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Dimension;
import javax.swing.JFrame;
public boolean running = false; /// <=============== invalid location
public class Game extends Canvas implements Runnable { // <==== class starts here
private static final long serialVersionUID = 1L;
public static final int WIDTH = 160;
public static final int HEIGHT = WIDTH / 12 * 9;
public static final int SCALE = 3;
public static final String NAME = "Game";
...
必须放在一个类中:
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Dimension;
import javax.swing.JFrame;
public class Game extends Canvas implements Runnable { // <==== class starts here
public boolean running = false; /// <=============== valid location
private static final long serialVersionUID = 1L;
public static final int WIDTH = 160;
public static final int HEIGHT = WIDTH / 12 * 9;
public static final int SCALE = 3;
public static final String NAME = "Game";
...
答案 1 :(得分:1)
你把
public boolean running = false;
在类定义之外,有效地在全局命名空间中。但Java中没有全局变量。这是不合法的。
我会说,这是一个奇怪的错误消息。我希望编译器能多一点。取决于class
或interface
或enum
的效果,因为一旦您使用public
开始声明,就会有三个合法的事情可以遵循。但是它就是这样啊。所以,编译器正确抱怨,我只是期望一个更有用的错误信息。