Re: Having problems calling a non-static method for a static context
iMohed@live.se wrote:
I guess the title says it all. I just dont understand why i cant cal
my Main.play() from my Model class. Both in the same package.
Model class short :
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
clickButton(source);
}
public void clickButton(Object o) {
int i = 0;
for (MButton s : this.but) {
if (s == o) {
Main.play(i);
}
}
}
Main class short :
public void play(int k) throws IOException {
while (game.finish == false) {
game.doTurn(k);
int j = 0;
for (Model.Square squares : game.sq) {
communication[j] = squares.value;
j++;
}
gameGfx.setColors(communication);
}
}
Any ideas guys and gals ??
The play() method "belongs to" each instance of Main, not
to the Main class as a whole. That is, you can only call play()
when you have an actual Main object at hand, something like
Main m = new Main();
...
m.play();
Inside play(), the Main object you called it with is known as
"this."
You're trying to call play() as if it were a static method,
a method that's associated with the class as a whole rather
than with a particular Main instance, a method in which there
is no "this" object. Sorry, can't do that: As written, play()
needs an object that can be its "this."
Possible cures: (1) Add `static' to the definition of play()
so it becomes a class method instead of an instance method. Or,
(2) call play() on some particular Main instance, presumably
the one representing the game in progress. From the short snip
you've provided, I can't tell whether (1) or (2) is appropriate.
Once you get past that problem, you'll then need to do
something about the IOException play() can throw.
--
Eric.Sosman@sun.com