Java [1242]

Zapisz się
Dodaj kartkę Dodaj bana
Powód wlepienia kartki
Wybierz wątek docelowy z listy lub wpisz jego ID
  • lucid

    Witam,

    mam zakrecony problem.

    Mam program ktory ma dwie klasy

    jedna jest glowna, klientGUI, w swingu stworzony interfejs graficzny

    druga sluzy do odbierania komunikatow z innego kompa..

    no i mam taki problem, odebralem powiedzmy zmienna tekstowa zmienna

    chcialbym zeby element jTextField z klasy klientGUI sie zmienil, to probuje

    klientGUI.jTextField1.setText( zmienna);

    blad.. bo jTextField1 jest private.. no to wymyslilem sobie ze dodam metode wklasie klientGUI o nazwie 'dodajtekst' ktora wewnatrz klasy juz podmieni tekst

    wtedy

    klientGUI.dodajtekst(zmienna);

    no i to dziala tylko wtedy, gdyu w definicji dodajtekst jest jako public static.. a poniewaz jest static to nie moge zmienic elementu jTextField.. czy ktos moze mi jakos pomoc ?
  • lucid

    ok wymyslilem cos takiego:

    klientGUI cokolwiek = new klientGUI();
    cokolwiek.dodaj(aktywni);

    wtedy nie musi byc static i dziala.. ale do konca nie wiem co ja tu zrobilem; P stworzylem nowy watek czy cos ?:)

    tak tak.. jak widac w javie jestem zielony; )
  • Koziołek [brat Javowiec]

    A poczytaj sobie o wzorcu obserwator...
  • sergi


    Powinieneś zacząć gdzieś tutaj:
    http://pl.wikipedia.org/wiki/Progra...

    Mocno na oko:
    Klasa to definicja na podstawie której tworzone są konkretne egzemplarze (obiekty, instancje).
    Słowo "static" jest używane do oznaczenia że metoda/pole ma "zasięg klasowy" - jest więc współdzielona przez wszystkie obiekty danego typu.

    Aby zrozumieć różnicę w "dobrym stylu" polecam:
    http://pl.wikipedia.org/wiki/Wzorze...

    Powodzenia !



  • lucid

    nie chce tworzyc nowego watku bo problem ciagle dotyczy tego samego programu:


    mam do napisania aplikacje sieciowa. Klient po zalogowaniu otrzymuje liste aktywnych uzytkownikow i.. albo sam do nich cos wysyla (konkretna wiadomosc), jednoczesnie powinien odbierac do niego wysylane komunikaty.

    W takim razie po zalogowaniu klient zaczyna nasluchiwac na konkretnym porcie.. I tu sie pojawia problem. stworzylem sobie metode nasluch() ruszajaca z potwierdzeniem zalogowania.

    Teraz.. chcialbym zeby ta metoda jakkolwiek dzialala w tle, ktora wyglada mniej wiecej tak:

    try {
    servertcp server = new servertcp(porcik);
    naglowek=server.startListening ();

    if (naglowek[1].equals("Who")) who(naglowek);

    } catch (Exception e) {
    e.printStackTrace();
    }


    no i server.StartListening(); zaczyna nasluch, po odebraniu komunikatu zwraca tablice stringow bedaca komunikatem..

    majac juz to na podstawie tresci komunikatu tutaj wywoluje sobie jakas metode XXX (tutaj np who).

    Teraz.. zeby po odebraniu pierwszego komunikatu klient nasluchiwal dalej zapetlam to... i program przyjmuje komunikaty.. ale nie rusza sie dalej, bo czeka na kolejne i kolejne i kolejne.. w rezultacie "Wisi".

    prawde mowiac nie wiem co dalej..
    moze jest jakis 'timer' ktory co jakis czas sprawdza czy jest polaczenie? tzn.. socket.accept() z odpowiednim timeoutem zeby sie nie wieszalo; )
  • Pablo

    myślę, że jednak będziesz musiał zaprząc w to wątki, nie bój się, nie są takie straszne...

    Swego czasu robiłem podobny projekt, chodziło dokładniej o wielowątkowy serwer pogawędek, był tam ServerSocket który czekał w pętli na podłączenie kolejnych klientów i gdy ten się podłączał, tworzony był nowy wątek do jego obsługi.

    Chyba jedynym sensownym sposobem rozwiązania tego problemu będzie stworzenie prostej architektury klient-serwer.

    Jakbym dobrze poszukał, to pewnie nawet źródełka tego serwera bym mógł Ci podesłać do nauki.