Swing ja SWT / Säikeet
Swing ja SWT eivät ilmeisesti kumpikaan ole säieturvallisia.
Siksipä:
Jos swingissä ja/tai swt:ssä GUI -lomakkeelle lisätään 2 metodia:
public saieTurvallinen() {
// tähän koodia. joka päivittää näyttöä, esim. jonkin lomakkeella olevan Labelin tekstiominaisuuden tai lisää uuden rivin moniriviseen tekstikenttään tai Listboxiin
}
public vierasSaie() {
// Mitä ???? TÄHÄN pitäisi kirjoittaa, jotta metodia saieTurvallinen() kutsuttaisiin mahdollisimman pian, mutta kutsuminen tehtäisiin siitä säikeestä käsin, josta käsin GUI -liittymän päivitys on turvallista, siitä huolimatta, Että vierasSaie() -metodia on voitu kutsua mistä säikeestä käsin tahansa !
}
Löytyykö vastausta tähän ?
Swing ja SWT eivät ilmeisesti kumpikaan ole säieturvallisia.
Siksipä:
Jos swingissä ja/tai swt:ssä GUI -lomakkeelle lisätään 2 metodia:
public saieTurvallinen() {
// tähän koodia. joka päivittää näyttöä, esim. jonkin lomakkeella olevan Labelin tekstiominaisuuden tai lisää uuden rivin moniriviseen tekstikenttään tai Listboxiin
}
public vierasSaie() {
// Mitä ???? TÄHÄN pitäisi kirjoittaa, jotta metodia saieTurvallinen() kutsuttaisiin mahdollisimman pian, mutta kutsuminen tehtäisiin siitä säikeestä käsin, josta käsin GUI -liittymän päivitys on turvallista, siitä huolimatta, Että vierasSaie() -metodia on voitu kutsua mistä säikeestä käsin tahansa !
}
Löytyykö vastausta tähän ?
Vastaukset 1
Vanhimmat
Jos lukisit niitä linkkejä, mitä sulle lähetetään..
No, yksinkertaisin tapaus:
public vierasSaie() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
saieTurvallinen();
}
});
}
Voit käyttää myös SwingUtilities.invokeAndWait-metodia, joka jää odottelemaan, kunnes rutiinin suoritus päätyy.
Jos haluat tehdä jonkun pidemmän operaation ilman että GUI-päivitys jää jumiin, käytä sitä paljon puhuttua SwingWorker-luokkaa. SwingWorkerin doInBackground-metodiin laitetaan varsinainen toiminta, joka ei saa haitata käyttöliittymän toimintaa ja process- ja/tai done-metodeihin käyttöliittymän päivitys.
Näillä keinoilla käyttöliittymän päivitys tapahtuu aina siinä säikeessä, jossa se on turvallista (Event Dispatch Thread)