黑马程序员技术交流社区
标题:
用线程做了一个倒计时,但是有问题,求解决
[打印本页]
作者:
陈红建
时间:
2012-8-3 11:55
标题:
用线程做了一个倒计时,但是有问题,求解决
//目标:在窗体中显示一个倒计时
import java.awt.Graphics;
import javax.swing.JFrame;
public class DaoJiShi {
public static void main(String[] args) {
new MyFrame("倒计时");
}
}
class MyFrame extends JFrame implements Runnable {
int time = 10;
String s = "无限制";
public MyFrame (String s) {
super(s);
this.setSize(200, 100);
this.setLocation(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
new Thread(this).start();
}
public void paint (Graphics g) {
g.drawString(s, 50, 50);
}
public void run() {
while (true) {
s = time + "s";
time--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.repaint();
if (time == 0) {
System.exit(0);
}
}
}
}
作者:
李东升
时间:
2012-8-3 12:56
这个问题就是写在JFrame上的文字没有刷新,要改进的话,就必须每次把JFrame上的字符清除再写上去,或者s改变一次,就重新加载一次JFrame。但是我找了半天,也没找到清除JFrame上文字的方法,至于重新加载JFrame,则更不现实。于是,我就想,在JFrame上添加一个JLabel,线程里的循环就每次把JLabel上的文字重新设置,这样就实现了动态改变。下面是改的一点代码。
public class MyFrame extends JFrame implements Runnable {
int time = 10;
String s = "无限制";
JLabel jl;
public MyFrame (String s) {
super(s);
this.setSize(200, 100);
this.setLocation(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
jl=new JLabel();
this.add(jl);
new Thread(this).start();
}
/*public void paint (Graphics g) {
g.drawString(s, 50, 50);
}*/
public void run() {
while (true) {
s = time + "s";
time--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//this.repaint();
jl.setText(s);
if (time == 0) {
System.exit(0);
}
}
}
}
复制代码
作者:
徐小骥
时间:
2012-8-3 13:30
本帖最后由 徐小骥 于 2012-8-3 13:32 编辑
我的思路是在jframe上添加一个jlabel,将时间显示在jlabel上!
//import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class djs {
public static void main(String[] args) {
new MyFrame("倒计时");
}
}
class MyFrame extends JFrame implements Runnable {
JLabel jl=new JLabel();//创建一个jlabel对象
int time = 10;
String s = "无限制";
public MyFrame (String s) {
super(s);
this.setSize(200, 100);
this.setLocation(300, 200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.add(jl);//将jl加载在MyFrame;
new Thread(this).start();
}
// public void paint (Graphics g) {
// g.drawString(s, 50, 50);
//}
public void run() {
while (true) {
s = time + "s";
time--;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
jl.setText(s);//给jl赋值
// this.repaint();
if (time == 0) {
System.exit(0);
}
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2