Mon, 21 Aug 2006 16:23:53 +0200

Köteles Ferenc <aksucef@freemail.hu>

thread sleep kérdés


Sziasztok, új vagyok itt a listán, üdvözlök mindenkit.

Egy olyan swing-es progit csinálgatok, aminek gombnyomásra ki kellene
írni valamit (példánkban: "Vasárnap"), majd várni 2 mp-et és 
átírni
valami másra ("Hétfő"). Próbáltam csak a késleltetést és a 
második
kiírást külön szálba tenni, végső kétségbeesésemben az 
első kiírásnak is
csináltam egy külön szálat, de sehogy nem jelenik meg a "Vasárnap
", a
gomb megnyomása után 2 mp szünet, majd "Hétfő". Ugyanakkor konzol
on
(System.out.println) minden az elképzelés szerint dolgozik, vagyis a GUI
frissítésével lehet probléma. Bemásolom az egész kódot, bocs,
 ha túl
hosszúnak számít. A rendszer debian sarge és sun-féle jdk 1.4.2.
           

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.Thread.*;

public class Implicit extends JFrame implements ActionListener {
JLabel l;
JPanel p;
MyThread t;
MyThread2 t2;

public static void main(String args[]) throws InterruptedException {
 Implicit i = new Implicit(args);
}


Implicit(String args[]) throws InterruptedException {
 super("Milyen nap van ma?");
 p = new JPanel();
 p.setLayout(new BorderLayout());
 l = new JLabel("", JLabel.CENTER);
 JButton again = new JButton("New try!");
 again.addActionListener(this);
 JButton exit = new JButton("Exit");
 exit.addActionListener(this);
 JPanel bp = new JPanel();
 bp.add(again);
 bp.add(exit);
 Font myfont = new Font("Serif",Font.BOLD,36);
 l.setFont(myfont);
 p.add(l, BorderLayout.CENTER);
 p.add(bp, BorderLayout.SOUTH);
 getContentPane().add(p);
 pack();
 setSize(400, 400);
 setVisible(true);

 t = new MyThread(2000); 
 t2 = new MyThread2(); 
}

 public void actionPerformed(ActionEvent e) {
  if (e.getActionCommand().equals("Exit"))
   System.exit(0);
  else
   nextTry();
 }

 void nextTry() {
  t2.run();
  t.run();
 }

class MyThread extends Thread {
int Ms;
 MyThread(int ms) {
 Ms = ms;
 }
 
 public void run() {
  try {
   sleep(Ms);
   l.setText("Hétfő");
   System.out.println("Hétfő");
  } catch (InterruptedException e) { }
 }
}

class MyThread2 extends Thread {
 MyThread2() { }
 
 public void run() {
   l.setText("Vasárnap");
   System.out.println("Vasárnap");
 }
}
}

-- 
Minden jót,

Feca

----------------------------------------
Softwared by Debian GNU/Linux
Just because you're paranoid, it doesn't
mean they're not out to get you.