使用线程使每隔一段时间改变一下JLabel的值

时间:2021-09-08 07:24:44
package com.thread;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class FrameDemo extends JFrame{
int str=0;
 JLabel jtf=new JLabel("0");
public FrameDemo() {
init();
}
public void init() {
this.setTitle("扫雷记时所用");
this.setBounds(200, 200, 200, 200);
this.add(createMain());
this.setVisible(true);
}
private JPanel createMain() {
JPanel jp=new JPanel();
JLabel jl=new JLabel("时间:");
Button start=new Button("开始");
Button toggle=new Button("切换");
jtf.setEnabled(false);
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Runnable() {
public void run() {
while(true){
try {
Thread.sleep(1000);
jtf.setText(Integer.toString(str++));
System.out.println(str);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.run();
}
});
jp.add(jl);
jp.add(jtf);
jp.add(start);
jp.add(toggle);
return jp;
}
public static void main(String[] args) {
new FrameDemo();
}

}

8 个解决方案

#1


为什么JLabel的值不变呢,永远是0

#2


问题是什么?

#3


因为你根本就没有启动线程,而是把主GUI线程给阻塞了。。。

这段:
new Runnable() {
public void run() {
while(true){
try {
Thread.sleep(1000);
jtf.setText(Integer.toString(str++));
System.out.println(str);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.run();

改为:
new Thread() {
  public void run() {
    while(true){
      try {
        Thread.sleep(1000);
        jtf.setText(Integer.toString(str++));
        System.out.println(str);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}.start();

#4


LS正解,, lz要记得启动线程是start()方法。

#5


引用 3 楼  的回复:
因为你根本就没有启动线程,而是把主GUI线程给阻塞了。。。

这段:
new Runnable() {
public void run() {
while(true){
try {
Thread.sleep(1000);
jtf.setText(Integer.toString(str++));
System.out.println(str);
} catch (Interru……


那个JLabel还是没有变啊

#6


引用 2 楼  的回复:
问题是什么?

为什么JLabel的值不变呢,永远是0 

#7


用javax.swing.Timer方便

#8


引用 5 楼  的回复:
引用 3 楼 的回复:
因为你根本就没有启动线程,而是把主GUI线程给阻塞了。。。

这段:
new Runnable() {
public void run() {
while(true){
try {
Thread.sleep(1000);
jtf.setText(Integer.toString(str++));
System.out.println(str);
} c……

对不起哈,我看错了,变了

#1


为什么JLabel的值不变呢,永远是0

#2


问题是什么?

#3


因为你根本就没有启动线程,而是把主GUI线程给阻塞了。。。

这段:
new Runnable() {
public void run() {
while(true){
try {
Thread.sleep(1000);
jtf.setText(Integer.toString(str++));
System.out.println(str);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.run();

改为:
new Thread() {
  public void run() {
    while(true){
      try {
        Thread.sleep(1000);
        jtf.setText(Integer.toString(str++));
        System.out.println(str);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}.start();

#4


LS正解,, lz要记得启动线程是start()方法。

#5


引用 3 楼  的回复:
因为你根本就没有启动线程,而是把主GUI线程给阻塞了。。。

这段:
new Runnable() {
public void run() {
while(true){
try {
Thread.sleep(1000);
jtf.setText(Integer.toString(str++));
System.out.println(str);
} catch (Interru……


那个JLabel还是没有变啊

#6


引用 2 楼  的回复:
问题是什么?

为什么JLabel的值不变呢,永远是0 

#7


用javax.swing.Timer方便

#8


引用 5 楼  的回复:
引用 3 楼 的回复:
因为你根本就没有启动线程,而是把主GUI线程给阻塞了。。。

这段:
new Runnable() {
public void run() {
while(true){
try {
Thread.sleep(1000);
jtf.setText(Integer.toString(str++));
System.out.println(str);
} c……

对不起哈,我看错了,变了