2014-03-25 47 views
-1

我在使应用程序工作时遇到了一些麻烦。非静态变量object1不能从静态上下文中引用

我得到的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定义。

这里是我的代码:

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(); 
    } 
+1

'公共静态对象object1;' –

+0

你看过_all_相关问题吗? –

回答

1

你的“主”的方法被认为是静态的,所以它只能访问静态对象,尝试宣告你的object1静:

public static Object object1; 

编辑:如果您需要2个对象存在不伤害:

public static Object object1; 
public static Object object2; 

不要混淆了静态字段和静态类(如单例)。在这个上下文中静态(静态对象object1)只意味着每个类car_game的实例都有该对象的唯一实例,在上面的情况下,它们将是Object的2个实例(object1和object2),即使你要实例化10 “car_game”类型的对象。

例如,如果我会怎么做:

car_game carGameObject1 = new car_game(); 
car_game carGameObject2 = new car_game(); 
carGameObject1.setObject1("this is one"); 

然后:

System.out.println(carGameObject2.getObject1()); 

它会打印出“这是一个”,因为自从object1是静态类的所有实例中,该属于的字段将共享相同的实例。

+0

虽然我需要两个对象,但静态不允许这样做? – user3371315

+0

所以你需要一个object1和另一个该对象的实例:object2?如果是这样,那么就没有任何限制你这样做了。不要在单例之间混用静态对象,这不是一回事。 – alex

+0

是的对象1和对象2:将工作?我被告知它不会 – user3371315

0

public object object1使得这款public static object object1;

您不能引用静态方法中的非静态类变量。

相关问题