Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » Killer 06:24
 » Doczu 06:23
 » kombajn4 06:19
 » SebaSTS 06:12
 » rzymo 05:36
 » Demo 05:30
 » Shark20 04:15
 » NWN 04:14
 » PiotrexP 04:06
 » Visar 03:00
 » Chavez 02:46
 » yanix 02:26
 » PaKu 02:20
 » metacom 02:18
 » xpx 02:17

 Dzisiaj przeczytano
 41108 postów,
 wczoraj 25974

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2024
A R C H I W A L N A   W I A D O M O Ś Ć
    

[JAVA] Problem z jframe i wątkami , john565 4/01/06 16:07
Tworze aplikacje, czata, są trzy pliki źródłowe z klasami (takie coś najlepiej mipasuje neichem się bawić w klasy zagnieżdżone) klient.java okno.java i aplikacja.java no i mam taki problem, w początkowej wersji zrobiłem tak że zaraz po uruchomieniu był tworzony obiekt klasy zawierjącej okno programu oraz klienta sieci mastępnie klient był uruchamiany metodą run(). Wszytsko działało do czasu gdy zapragnołem aby użytkownk miał możliwośc podawania adresu ip hosta oraz numeru portu, umieściłem w tym celu na jframe kilka textarea oraz przycisk którego naciśnięcie mało wywoływać metode run() dla klienta. Niestety tu wynikł problem gdyz gdy nacisne przycisk pozostaje on w stanie wciśniętym (no oglnie jest te tło przy wciśniętym przycisku) a aplikacja zamiera jednak jak obserwuje na serwerze łączy sie z nim a po zgaszeniu serwka wszystko co maił wysłać serwek pojawia sie w aplikacji klienckiej i aplikacja wraca z zastoju. Nie pomogło także to zę utworzyłem w programie glownym medode polacz() zawierjącą konstruktor dla klienta oraz wywołanie metody run() klienta i w obsłudze przycisku właśnie te metode połacz wywoływałem.

Mi zbrakło pomsyłów i tkwie w martwym punkcie prosił bym zatem o jakiekolwieg sugestie, mam nadzieje że opis dość wyczerpujący

z góry dziękuje i pozdrawiam

f*ck

  1. klasa , celt 4/01/06 16:35
    implementująca metodę run jaką klasę dziedziczy/implementuje?

    Do JFrame najlepiej dodać JPanel i następnie "ustwić" jakiś Layout np. GridBagLayout a następnie umieścić odpowiednie pola na tak przygotowanym panelu.
    Gdy już utworzysz pola to dalej
    JButton polacz = new JButton("Połącz");
    polacz.addActionListener(new ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    new Thread(new KlasaWatku()).start();
    }
    });

    class KlasaWatku implements Runnable
    {
    public KlasaWatku()
    {
    }

    public void run()
    {
    try
    {
    while (true)
    {
    EventQueue.invokeLater(new
    Runnable()
    {
    public void run() {
    // jakies akcje ....
    }
    });
    Thread.sleep(1);
    }
    }
    }
    }

    Jeszcze dochodzi kwestia przerwania watku itd...

    Everything should be made as simple as
    possible, but no simpler

    1. dzięęęęęęęęęęki :] ale jescze kilka pytań... , john565 4/01/06 17:13
      pomogło, wychodzi na to że nieprawidłowo wywoływałem wątek ;], teraz troche pozmieniałem u siebie w kodzie i działa :]


      mam jescze pare pytań
      public void run()
      {
      try
      {
      while (true)
      {
      EventQueue.invokeLater
      new Runnable()
      {
      public void run()
      {
      ...
      }
      });
      Thread.sleep(1);
      }
      }
      czy stosowanei tego event queue jest konieczne, na raz bedzie tylko jeden egzęplarz ątku, ponadto ku czemu dokładnie to służy napisz jakbyś mógł .



      i jak by wygladał z zastopowaniem tego wątku (czy wystarczy .stop() tyle jak bedzie wyglądał poczatek :]), oczywista mam już zaprojektowana obsługe tego Jbuttona tak aby przy ponownym wciśnięciu wykonwyał kod rozłączania z serwerem dodatkowo zamiast new KlasaWatku() w


      new Thread(new KlasaWatku()).start();

      jest już konkretna nazwa gdyż obiekt towrze wcześniej i nadaje mu nazwe, powiedzmy neich sie nazywa klient :]

      jescze raz dzięki za te i ewentualne przyszłe odpowiedzi :]

      f*ck

  2. reszta , celt 4/01/06 17:49
    EventQueue - kolejkuje zdarzenia
    http://java.sun.com/...pi/java/awt/EventQueue.html

    musisz sam popróbować, o ile dobrze pamiętam to aby przerwać taki wątek np.
    1. musisz zadeklarować zmienną private KlasaWatku klWatku
    (w klasie w ktorej wywolujesz uruchamiasz watek;)
    2. utworzyc klase np. podczas uruchamiania watku
    klWatku = new KlasaWatku(); // w obsludze przycisku polacz
    3. dodac przycisk np. cancel (dodac od panelu)
    4. dodac obsluge przerwania watku
    cancel.addActionListener(new
    ActionListener()
    {
    public void actionPerformed(ActionEvent event)
    {
    if (klWatku != null) klWatku.interrupt();
    }
    });

    5. w funkcji run (KlasyWatku) zamiast while(true)
    cos takiego while (!Thread.currentThread().isInterrupted())
    {
    // akcja
    }

    PS. no ale tak poza tym moge sie mylic :)

    Everything should be made as simple as
    possible, but no simpler

    1. ... , john565 4/01/06 18:20
      dobra dzieki za wysiłek jednak pozostawi jak jest, tzna nie ma kolejkowania i wątek sie sprawuje odbrze, klasa wątku jeststatyczna ale meniejsza o to ;]

      dzieki za wszelkie sugestie przydały sie w 101 procentach

      i na koniec jescze jedno pytanie, jak już sie połącze to daje polom z portem nickiem i adresem hosta nazwaobiekty().disabled(); i to dziła ale nie jest widoczne do moemntu gdy nei najade nad pole myszką, wtedy po kawałaku jakby sie odświeża i przyjmuje kolor wygaszonego, to samo jak ustawiam przy polu endabled()

      DZIĘĘĘĘĘĘĘĘĘĘKI wielkie raz jescze :]

      pozdro

      f*ck

      1. możesz , celt 4/01/06 18:45
        1. tego wartość sleep'a zmienić (być może to jest przyczyną)
        2. jest na pewno jakaś funkcja do "odświeżania"
        nie wiem czy dobrze pamiętam ale było coś takiego jak
        funkcja chyba nazywająca się revalidate()

        Everything should be made as simple as
        possible, but no simpler

        1. jeszcze , celt 4/01/06 18:50
          jedno jeżeli używasz metod Component.enable()
          to lepiej użyć Component.setEnabled(true) lub setEnabled(false)

          Everything should be made as simple as
          possible, but no simpler

        2. slepa nie używałem wogóle , john565 4/01/06 18:52
          no działa w sumie bez niego. a co do UI to sie jescze rozeznam :]

          tenks poraz 3ci

          f*ck

    
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL