我在使我的应用程序正常工作时遇到了一些麻烦。
我得到了 error: error: non-static variable object1 cannot be referenced from a static context
error: error: non-static variable object1 cannot be referenced from a static context
我确实收到了错误:
error: object_game is not abstract and does not override abstract method keyPressed(KeyEvent) in KeyListener public class car_game extends JFrame implements Runnable, KeyListener
但是我解决了这个问题,因为我需要keyTyped, keyPressed, keyReleased定义。
keyTyped, keyPressed, keyReleased
这是我的代码:
public class car_game extends JFrame implements Runnable, KeyListener { public object object1; //Main program public static void main(String[] args) { object1 = new Object() {}; Thread t = new Thread(new object_game()); t.start(); }
您的“主要”方法被认为是静态的,因此它只能访问静态对象,请尝试将object1声明为静态:
public static Object object1;
编辑:如果您需要2个对象,则这样做没有任何危害:
public static Object object1; public static Object object2;
不要混淆静态字段和静态类(例如Singleton)。在此上下文中,静态(静态Object object1)仅表示在类car_game的每个实例中只有一个对象的实例,在上述情况下,即使您实例化了10个对象,也只有2个Object(object1和object2)实例。类型为“ car_game”的对象。
例如,如果我愿意:
car_game carGameObject1 = new car_game(); car_game carGameObject2 = new car_game(); carGameObject1.setObject1("this is one");
然后:
System.out.println(carGameObject2.getObject1());
它会打印“ this is one”,因为因为object1是静态的,所以该字段所属的类的所有实例将共享同一实例。