import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JFrame implements ActionListener, Runnable { //runnable监听的到底是什么呢 JButton b1 = new JButton("start");
JButton b2 = new JButton("stop");
JPanel p = new JPanel();
TextField tf = new TextField(10);
Thread t;
Date d1;
Date d2; public Main() {
p.add(b1);
p.add(b2);
p.add(tf);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setContentPane(p);
this.setTitle("计时器");
this.setSize(400, 200);
this.setVisible(true);
b1.addActionListener(this);
b2.addActionListener(this);
} public void run() {
while (true) {
try {
Thread.sleep(1); //sleep这指的是哪 什么意思
} catch (InterruptedException e) {
}
d2 = new Date();
tf.setText(new Long((d2.getTime() - d1.getTime())).toString() + "毫秒"); //如果时间表现形式变成`00:00:00这样开始 应该???
}
} public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(b1)) {
t = new Thread(this);
t.start();
b1.setEnabled(false);
b2.setEnabled(true);
d1 = new Date();
tf.setText("");
} else {
b1.setEnabled(true);
b2.setEnabled(false);
if (t != null) {
t.stop();
}
}
} public static void main(String[] args) {
new Main();
}
}
这个代码就是利用了线程的 谢谢
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Main extends JFrame implements ActionListener, Runnable { //runnable监听的到底是什么呢 JButton b1 = new JButton("start");
JButton b2 = new JButton("stop");
JPanel p = new JPanel();
TextField tf = new TextField(10);
Thread t;
Date d1;
Date d2; public Main() {
p.add(b1);
p.add(b2);
p.add(tf);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setContentPane(p);
this.setTitle("计时器");
this.setSize(400, 200);
this.setVisible(true);
b1.addActionListener(this);
b2.addActionListener(this);
} public void run() {
while (true) {
try {
Thread.sleep(1); //sleep这指的是哪 什么意思
} catch (InterruptedException e) {
}
d2 = new Date();
tf.setText(new Long((d2.getTime() - d1.getTime())).toString() + "毫秒"); //如果时间表现形式变成`00:00:00这样开始 应该???
}
} public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(b1)) {
t = new Thread(this);
t.start();
b1.setEnabled(false);
b2.setEnabled(true);
d1 = new Date();
tf.setText("");
} else {
b1.setEnabled(true);
b2.setEnabled(false);
if (t != null) {
t.stop();
}
}
} public static void main(String[] args) {
new Main();
}
}
这个代码就是利用了线程的 谢谢
Thread.sleep(1); 在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
tf.setText(new Long((d2.getTime() - d1.getTime())).toString() + "毫秒"); 返回d1与d2相差的毫秒数
b1.addActionListener(this);
b2.addActionListener(this);
所以Main可以监听到b1,b2按钮上的事件
Thread.sleep(1); 让当前线程- Main 暂停1毫秒//如果时间表现形式变成`00:00:00这样开始 应该??? ----不明白这个问什么意思
String s=t/3600000+":"+(t/60000)%60+":"+(t/1000)%60;
tf.setText(s);
if (t != null) {
t.stop();
在指教一下
这T不是空的意思 这有什么意义呢 直接用t.stop不可以吗
t.stop();
在指教一下
这T不是空的意思 这有什么意义呢 直接用t.stop不可以吗
怎么提示String s=t/3600000+":"+(t/60000)%60+":"+(t/1000)%60; 不是语句
这个判断一下t是否为空,主要是防止t==null时,运行t.stop()时会发生异常。