I tried to call non-static drawScore()
method from static calldrawScore()
, but I got the error "cannot find symbol constructor Game"
on line Game draw = new Game();
in calldrawScore()
. When I pass with mouse over that line it says "GameScreen (Game) in Game cannot be applied to ()"
.

- 653
- 1
- 7
- 9
-
To call a non-static method you need an instance of the class the method expect. If you have this, you can call it anywhere. – Peter Lawrey Sep 10 '13 at 09:36
-
Remember in OOP static means its a Class method as no-static means its an Instance method. – enkor Sep 10 '13 at 09:43
-
possible duplicate of [What is the reason behind "non-static method cannot be referenced from a static context"?](http://stackoverflow.com/questions/290884/what-is-the-reason-behind-non-static-method-cannot-be-referenced-from-a-static) – user207421 Sep 10 '13 at 09:44
4 Answers
- Its rule of thumb that a static method can't access any non-static variable or methods.
- It is because static member
belongs to the class
where as non-static
members belongs to the object
, so as the static member tries to access a non-static member it won't be clear that which objects member is being accessed, so its prohibited in JAVA.

- 763
- 5
- 17
-
2You can access a non static method from static method by creating an instance in the static method. – Code Enthusiastic Sep 10 '13 at 09:45
-
@CodeEnthusiastic you are right about it, thats one way of defining a singleton principle, but as far as i know, there is no direct way of accessing a non-static member from a static member and was something i wanted the OP to know, but thanks for providing another angle to this answer. – nidhi Sep 10 '13 at 10:42
Maybe if you can change "getScore(int x)" into:
public static int getScore(int x, GameScreen gs) {
score = x;
gs.drawScore();
return score;
}
and now you can call it in "GameScree" by
GameScreen.getScore(valueSome, yourObject);
Another way is to change all GameScreen into Singleton

- 1
- 1

- 587
- 5
- 21
Your class GameScreen constructor is taking Game class object as a parameter. You can either get the current Game instance and pass it as a argument or create a default constructor in your Gamescreen class.

- 2,076
- 2
- 15
- 17
To do GameScreen d = new GameScreen()
you need to have 0-argument constructor for GameScreen
. You don't have such constructor.
Anyway, your code looks preety bad, because you are creating new GameScreen
in every calldrawScore()
...
I think you need to read what's the difference between static and non-static methods. Then go back, design it and implement better.

- 19,665
- 4
- 70
- 110