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 pozdrawiamf*ck - 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 - 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
- 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 - ... , 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 :]
pozdrof*ck - 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 - 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 - 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 3cif*ck
|
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|