podstawy javy

themarcq
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

Jestem nowy w te klocki, uczę się z książki.
Nie mogę jednak roztrzygnąć czemu mi nie działa to:

plotno_menu.java

Kopiuj
 
private void wybierz(){
if (wybor==0){/**/}
if (wybor==1){/**/}
if (wybor==2){menu.koniec();}
}

menu.java

Kopiuj
 
public void koniec(){
this.notifyDestroyed();
}

Wyswietla błąd mówiący, że nie-statyczna metoda menu.koniec nie może być wykonana przez statyczny kontekst(?!)

PI
  • Rejestracja: dni
  • Ostatnio: dni
0

Zrób:

Kopiuj
public static void koniec (){...}

to załatwi sprawę na chwile a Ty doczytaj o modyfikatorach public private static itd. Parę dni temu czytałem coś podobnego na temat metod static. O ile dobrze pamiętam był identyczny błąd jak u Ciebie.

themarcq
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

dobrze, teraz błąd przesunął się na koniec(), treść błędu dalej ta sama

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

Na pewno przy metodzie wybierz nie ma modyfikatora static? Generalnie sprawa jest taka, że jak jesteś w statycznej metodzie to nie możesz odwoływać się do pól, ponieważ nie masz wskaźnika do obiektu. Wszystkie wywołania metody np foo() są równoważne zapisowi this.foo(). To this jest dodawane implicite w niestatycznych metodach, a w statycznych this nie jest dostępne (ponieważ metody statyczne nie są wywoływane na rzecz jakiegokolwiek obiektu).

Przemyśl swój program i najlepiej powyrzucaj wszystkie statyczne rzeczy, oprócz singletonów i funkcji main().

themarcq
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

nigdzie nie mam static, a gdy jest przy koniec()takze nie dziala

E:dobrze, rozwiązałem zagadkę:
musiałem przenieść cały CommandListener do menu i wszystkie rzeczy z tym związane, a funkcję notifyDestroyed przeniosłem do destroyApp(), ogólnie, wszelkie odniesienia do potrzebnej mi funkcji zawarłem w głownym midlecie

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.