2012-02-23 3 views
-1

Possible Duplicate:
What is the reason behind “non-static method cannot be referenced from a static context”?Нестационарный метод не может ссылаться на статический контекст?

У меня есть следующий метод:

public void fillMachine(Game game) 
{ 
    // Colours of balls are evenly spread between these colours, 
    // in ascending order. 
    Color [] colourGroupColours 
    = new Color [] {Color.red, Color.orange, Color.yellow, 
        Color.green, Color.blue, Color.pink, 
        Color.magenta}; 
    // This happiness change will show up when the GUI is added. 

    Color ballColour; 
    int noOfBalls = game.getMachineSize(); 
    for (int count = 1; count <= noOfBalls; count++) 
    { 
    // The colour group is a number from 0 
    // to the number of colour groups - 1. 
    // For the nth ball, we take the fraction 
    // (n - 1) divided by the number of balls 
    // and multiply that by the number of groups. 
    int colourGroup = (int) ((count - 1.0)/(double) noOfBalls 
          * (double) colourGroupColours.length); 
    ballColour = colourGroupColours[colourGroup]; 
    game.machineAddBall(makeNewBall(count, ballColour)); 
    } // for 

    } // fillMachine 

В главном классе у меня есть fillMachine(game1);

я получаю ошибку: non-static method fillMachine(Game) cannot be referenced from a static context fillMachine(game1);

я не уверен, как это исправить это все же.

+0

Есть вопрос здесь? – ewok

+0

добавить статику к вашему методу – VirtualTroll

ответ

2

Это потому, что вы не можете получить доступ к нестационарным элементам из метода static. (если у вас нет объекта для вызова метода)

Ваш метод main является статическим. Это означает, что он не связан с конкретным объектом класса, а с самим классом. fillMachine не является статичным, то есть вы можете называть его только конкретным экземпляром класса. Который у вас нет. Вы можете:

  • сделать способ static, если вы не используете в нем какие-либо нестатические элементы.
  • создать объект и вызвать метод на экземпляре
+4

Вы, безусловно, * можете * - вам просто нужен экземпляр для вызова члена * на *. –

+1

@JonSkeet: приятный выбор нит. – Kevin

+0

Нут нужно было подобрать! –

2

Вы действительно не дали нам много контекста здесь, но в основном ваш метод является экземпляром метода, поэтому должен быть вызвано на инстанции класса. Вы можете вызвать его из статического метода, но вам нужно, чтобы экземпляр вызывал его. Например:

Foo foo = new Foo(); // We don't know what class this is in... you do. 
foo.fillMachine(game1); 

Конечно, вы, возможно, уже есть экземпляр класса, который вы создали в другом месте, и это может быть соответствующий экземпляр для вызова метода далее.

В качестве альтернативы вы можете сделать метод статическим, если ему не нужно ссылаться на какие-либо переменные экземпляра.

Важно понимать разницу между статическими членами (которые имеют отношение к классу, а не какой-либо конкретный экземпляра класса) и экземпляра членов (которые связаны с конкретным экземпляром).

Для получения дополнительной информации см. Java Tutorial.

+1

man.You человеческий робот. –

0

просто изменить

public void fillMachine(Game game) 

в

public static void fillMachine(Game game)