Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 4 odgovora
  • 2.653 pregleda

Najnovija ↓

Swing, thread, invokeLater 25.02.2008. u 21:16 · pre 227 meseci #1
Dakle, potrebno mi je da preko dugmeta iz action listenera startujem thread/runnable
koji dok bude radio da lepo radi sa kontrolama, da popuni textfield, table i sl...
Sad, sve je to ok, jasna mi je prica sa event dispatcher-om, procitao sam dosta
o tome, probao sve moguce primere ali jednostavno nema sanse da proradi.
Desi se ono suprotno, ili se dugme zamrzne ili ne ispisuje sve odjednom pa tek na
kraju izbaci sve sto ima u text area-u.

Code:

public void search(String url, String[] tags) {
   // metoda koja treba da se pozove da ispise na kontrolu
}
...
// u listeneru
public void actionPerformed(ActionEvent arg0) {
   Thread worker = new Thread() {
      public void run() {
         SwingUtilities.invokeLater(new Runnable() {
         public void run() {
                 // ovde search pozivam nekoliko puta
             }
         }
     }
   }
   worker.start();
}

Ovako je u sustini poslednja varijanta koju sam pokusao, kao kombinacija invoka i thread-a. Mislio sam
da mi thread uopste nece biti potreban vec samo runnable. Mozda je do actionPerformed, jer kako
pise na sunovom sajtu on se 'invokuje' u event-dispatching thread-u pa ne treba pozivati invoke
u njemu. Onaj swing worker ne bih mogao da koristim jer je za 1.5. Koristim jericho
html parser i njegove metode pozivam u search-u, pa mi je palo na pamet mozda nije thread safe.
Ako neko ima slicna iskustva...help

Re: Swing, thread, invokeLater 26.02.2008. u 15:25 · pre 227 meseci #3
Ma prosta je stvar, poštuj ova dva pravila:
1. Dugačku operaciju obavljaj u posebnom Threadu
2. Ažuriranje GUI-ja radi iz EventDispatchThreada

U tvoj slučaju bi to izgledalo ovako:
Code:

   Thread worker = new Thread() {
      public void run() {

         // ovde radis dugacku operaciju

         SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                 // ovde azuriras sve GUI kontrole rezultatima tvoje operacije
            }
         }
     }
   }
   worker.start();
Re: Swing, thread, invokeLater 05.03.2008. u 11:46 · pre 227 meseci #5
Prebacen je program na .NET...
Meni je bilo potrebno da u toku te dugacke operacije menjam
propertije kontrola. Pogledacu definitivno swingworker cim
budem imao vremena jer trenutno ga imam uzasno malo.
Hvala svima u svakom slucaju
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme