ďťż
 
komunikat "non-static variable this cannot be referenced ...." ďťż
 
komunikat "non-static variable this cannot be referenced ...."
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

komunikat "non-static variable this cannot be referenced ...."



trzcinka - 22-03-2006 13:14
komunikat "non-static variable this cannot be referenced ...."
  Witam
Proszę o pomoc w rozwiązaniu problemu który czesto mi się pojawia. Robie
sobie klase np

class oknoText extends JTextArea
{
public void oknoText(String t, int x, int y, int sz, int wy)
{
JLabel b1 = new JLabel (t);
}
}

i teraz w funfcji main próbuję utworzyć obiekt tej klasy

JTextArea komunikat = new oknoText("sdfgsdfsfsf");

i umieścić na warstwie

c.getLayeredPane().add(komunikat);

jednak podczas kompilacji dostaję komunikat:
"non-static variable this cannot be referenced from a static context"

Czy ktoś mógł by w prosty sposób wyjaśnić mi i może innym o co chodzi. Wiem
że dla wielu jest to banał ale ja nie wiem o co chodzi i jeśli kogoś to
irytuje proszę o powściągliwość. Dzięki za pomoc życzliwym.





wrobel cwirek - 22-03-2006 13:14

  trzcinka <uu@uu.pl> napisał(a):
>
> Czy ktoś mógł by w prosty sposób wyjaśnić mi i może innym o co chodzi. Wiem
> że dla wielu jest to banał ale ja nie wiem o co chodzi i jeśli kogoś to
> irytuje proszę o powściągliwość. Dzięki za pomoc życzliwym.
>
W metodach statycznych mozesz sie odwolywac jedynie do pol i metod starycznych.

Jesli masz obiekty nie-startyczne - musisz sie do nich odwolywac z kody
nie-statycznego.

Nie dziala to w druga strone, tzn. z obiektow nie-statyczncyh mozesz odwolywac
sie do obiektow statycznych (metod, pol)

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/




trzcinka - 22-03-2006 13:14

  Czy na podstawie tego przykładu możesz zademonstrować jak to powinno
wygladać i jak rozpoznać która metoda jest statyczna a która nie?

Pozdrawiam




Leonard Milcin Jr. - 22-03-2006 13:14

  trzcinka skrev:
> Witam
> Proszę o pomoc w rozwiązaniu problemu który czesto mi się pojawia. Robie
> sobie klase np
>
> class oknoText extends JTextArea
> {
> public void oknoText(String t, int x, int y, int sz, int wy)
> {
> JLabel b1 = new JLabel (t);
> }
> }

Z innej beczki: nazwy klas zwykło się rozpoczynać wielką literą w przeciwieństwie
do nazw zmiennych które rozpoczyna się małą literą, lub pisze wyłącznie wielkimi
literami.

Pozdrawiam,

Leonard





=?UTF-8?B?QXJ0dXIgQ2h5xbx5?= - 22-03-2006 13:14

  trzcinka wrote:
> Czy na podstawie tego przykÂładu moÂżesz zademonstrowaĂŚ jak to powinno
> wygladaĂŚ i jak rozpoznaĂŚ która metoda jest statyczna a która nie?
>
> Pozdrawiam
>
>
Witam.
Metoda statyczna to np. static void wyswietl(){} albo najczesniej
spotykana
public static void main(String[] args){} czyli ta ktorej uzyles :)

Szczerze nie wiem jak na tym przykladzie bo u mnie dziala bez problemu
public static void main(String[] args) {
OknoText komunikat = new OknoText();
komunikat.oknoText("aaa",100,100,100,100);
JFrame frame = new JFrame();
frame.getLayeredPane().add(komunikat);
frame.setVisible(true);
}
Dziwi mnie za uzyles
JTextArea komunikat = new oknoText("sdfgsdfsfsf");
Po pierwsze powinien ci wyrzucic ze nie ma takiego konstruktora (klasa
oknoText nie ma takiego konstruktoa chociaz klasa JTextArea ma). Druga
sprawa ze w ten sposob tworzysz obiekt JTextArea wiec jakos to nie ma
sensu. Jakbys mial konstruktor i w nim wywolal super() to cos moze by z
tego bylo.

Bardzo chetnie ci pomoge ale wkleiles czesciowy kod. Reszty musialem sie
domyslic.
Ostatecznie nie wiem czy chcesz sie dowiedziec co oznacza static czy
rozwiazac twoj przyklad.

Wyjasnienie przedmowcy o static jest trafne i powinno rozjasnic sprawe.

Pozdrawiam
Artur Chyży

P.S. Prosze nazywaj nazwy klas zgodnie z konwencja czyli od duzej
litery. Metody zaczynaja sie od malych :)




trzcinka - 22-03-2006 13:14

  przepraszam całego teksu nie umieściałem zeby nie "zaśmiecać" obrazu sprawy
ale jeśli takie życzenie to dołączam całą klasę

public void oknoText(String t,int x,int y,int sz,int wy )
{
JLabel b1 = new JLabel (t);
b1.setFont(new Font("Dialog", Font.BOLD| Font.ITALIC,16));
b1.setForeground(Color.yellow);
b1.setOpaque(false);
b1.setBounds(x,y,sz,wy);
Border rbx1=BorderFactory.createRaisedBevelBorder(),
rby1=BorderFactory.createLoweredBevelBorder();
b1.setBorder(BorderFactory.createCompoundBorder(rb x1, rby1));
}

main
{
..
..
JFrame c = new okno();
..
..
JTextArea d = new oknoText("To jest teks", 100,100,300,300);
c.getLayeredPane().add(d);

a odnośnie " Ostatecznie nie wiem czy chcesz sie dowiedziec co oznacza
static czy
rozwiazac twoj przyklad." - chcę się dowiedzieć jaka klasa to statyczna bo
jeśli ma atrybut static to zrozumiałe ale w moim przypadku nie widzę czegoś
takiego a komunikat jest więc pytanie moje zostaje dalej aktualne

pozdrawiam




Piotr Kobzda - 22-03-2006 13:14

  trzcinka wrote:

[...]
> a odnośnie " Ostatecznie nie wiem czy chcesz sie dowiedziec co oznacza
> static czy
> rozwiazac twoj przyklad." - chcę się dowiedzieć jaka klasa to statyczna bo
> jeśli ma atrybut static to zrozumiałe ale w moim przypadku nie widzę czegoś
> takiego a komunikat jest więc pytanie moje zostaje dalej aktualne
>

No to uważaj... :)

Kontekst statyczny (static context), to:
-- metoda statyczna,
-- inicjalizator statyczny klasy,
-- inicjalizator pola statycznego.

O tym czy metoda/blok inicjujący/pole jest statyczny(e) decyduje
modyfikator 'static' tego elementu, nie zaś klasy, w której się znajduje.

Klasa statyczna (z modyfikatorem static lub zadeklarowana w kontekście
statycznym) kontekstu statycznego nie określa -- statyczność klasy
decyduje jedynie o braku powiązania obiektów tej klasy z obiektami klasy
zawierającej (nawiasem mówiąc, klasa top-level także za statyczną w tym
rozumieniu uznawana być musi, pomimo, że modyfikator static nie jest dla
niej dozwolony...).

W kontekście statycznym nie możesz odwoływać się do obiektu (instancji
klasy), gdyż z żadnym obiektem nie jest [ów kontekst] powiązany.
Dopiero niestatyczny kontekst udostępnia referencję do obiektu przez
'this', którą zwykle w odwołaniu się pomija.

W Twoim przypadku 'c' jest polem obiektu, więc zapis:

c.getLayeredPane().add(komunikat);

interpretowany jest jako:

this.c.getLayeredPane().add(komunikat);

W kontekście statycznym jednak 'this' nie istnieje, więc kompilator
grzecznie Cię o tym fakcie informuje.

Gdyby pole 'c' było statyczne (pomijam sensowność takiego rozwiązania),
to kompilator potraktowałby Twój zapis jako:

OknoText.c.getLayeredPane().add(komunikat);

i nie miałby nic przeciwko.

Rozwiązanie, to przenieść cały kod inicjalizacyjny z metody main do
wydzielonej metody obiektu, lub jeśli koniecznie chcesz odwoływać się do
pól w kontekście statycznym, jawnie wskazać obiekt, który Cię interesuje
np. tak:

OknoText oknoText = new OknoText();
oknoText.c.getLayeredPane().add(komunikat);

BTW -- Dobrą praktyką jest jawne poprzedzanie odwołań do pól obiektów
słówkiem 'this', zwiększa się wówczas nieco czytelność kodu, a przy
okazji jawnie określasz oczekiwany kontekst użycia.

HTH,
piotr




trzcinka - 22-03-2006 13:14

  Użytkownik "Leonard Milcin Jr." <leonard.milcin@post.wytnij.pl> napisał w
wiadomości news:4421206b$1@news.home.net.pl...
> trzcinka skrev:
>> Witam
>> Proszę o pomoc w rozwiązaniu problemu który czesto mi się pojawia. Robie
>> sobie klase np
>>
>> class oknoText extends JTextArea
>> {
>> public void oknoText(String t, int x, int y, int sz, int
>> wy)
>> {
>> JLabel b1 = new JLabel (t);
>> }
>> }
>
> Z innej beczki: nazwy klas zwykło się rozpoczynać wielką literą w
> przeciwieństwie
> do nazw zmiennych które rozpoczyna się małą literą, lub pisze wyłącznie
> wielkimi
> literami.
>
> Pozdrawiam,
>
> Leonard

Dzięki bedę stosował zgodnie z konwencją

kt




Piotr Kobzda - 23-03-2006 03:33

  trzcinka wrote:

> przepraszam całego teksu nie umieściałem zeby nie "zaśmiecać" obrazu sprawy
> ale jeśli takie życzenie to dołączam całą klasę

Gdzie ją dołączasz??

To co powklejałeś, to właśnie *śmieci* jakieś są!
Jak próbuję to skompilować, to mam dużo innych komunikatów, tego jednak,
o którym piszesz akurat nie widzę?!...
Gdy tak patrzę dłużej na to coś wysłał, to nie wiem już w końcu co to
jest np. 'c' i jak wyglądają inne zależności w Twoim kodzie?... i
szczerze mówiąc, mało mnie to już w sumie interesuje...

Na przyszłość jednak, jeśli nie wiesz dlaczego coś się nie kompiluje, to
nie tnij kodu, który ma się Twoim zdaniem skompilować i opublikuj go w
całości. Gdyż możliwe, że właśnie przyczynę błędu wycinasz, a my wróżki
wyobraź sobie nie jesteśmy, by zgadywać coś wyciął...

piotr
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [PostgreSQL] Komunikaty w sytuacji naruszenia=?iso-8859-2?Q?ogranicze=F1?= kluczy probl.z komunikatem "Class definition WORD.APPLICATION is not found" w VFP 6 MSDTC =?ISO-8859-2?Q?k=B3opoty_z_komunikacj=B1?= Szukam skryptów do serwisu o komunikatorach [oracle] Jak wyslac komunikat do windows Wlasny komunikat bleów w Access - Help Adobe Bridge -denerwujący komunikat [MySQL] komunikat - pomocy! dziwny komunikat w corelu 9 komunikaty kwerend
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • absolwenci.keep.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com