Chào các bạn, chomình hỏi chút về đa luồng trong java. Mình có 1 giao diện swing, trên đó có duy nhất 1 nút Restart, khi bấm nút thì thực hiện việc setText cho 1 label. Bên cạnh đó mình có 1 luồng in ra số từ 1 đến 10.000. như sau
public class ThreadCheckVer implements Runnable{
@Override
public void run() {
for (int i = 0; i < 1000000; i++) {
System.out.println(i);
}
} }
Khi chạy giao diện swing mình đồng thời cho thread này chạy
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
restartDemo frame = new restartDemo();
frame.setVisible(true);
//setdata();
tcv = new Thread(new ThreadCheckVer());
tcv.start();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}`
Sự kiên cho nút trên giao diện swing
`btnRestart.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int opt = JOptionPane.showConfirmDialog(null,"Are you sure?", "Confirm", JOptionPane.YES_NO_OPTION);
if (opt == JOptionPane.YES_OPTION) {
lblstatus.setText("Restarting...");
try {
tcv.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
lblstatus.setText("Restarting...");
}
}
});`
Vấn đề ở đây là mình mong muốn khi bấm nút thì lblstatus sẽ hiện “Restarting…” trong khi chờ thread in số xong việc, nhưng thực tế thì nó đang chạy ngược lại, in xong số rồi mới setText cho lblstatus.
Bạn nào có thể giải thích giúp mình vì sao lại như vậy không? Tks a lot.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?