我这个程序就是 有一个按钮,按下后傍边的时间就会开始动。。
编译能通过, 但是我按下按钮的时候 程序就死了。
帮我解决下100.import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class E2 extends JFrame {
JLabel labels;
JButton b;
public E2(){
JPanel p=new JPanel();
labels=new JLabel("00:00");
b=new JButton();
p.add(labels);p.add(b);
getContentPane().add(p);
b.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e1){
int i=0;
int I=0;
int m=0;
int M=0;
while(true)
{ i++;
try{Thread.sleep(1000);}
catch(InterruptedException e){}
if(i==10)
{
I+=1;i=0;
}
if(I==6)
{
m+=1;I=0;
}
if(m==10)
{
M+=1;m=0;
}
labels.setText(String.valueOf(M)+String.valueOf(m)+":"+String.valueOf(I)+String.valueOf(i));
}
}});
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
public static void main(String args[]){new E2();}}
编译能通过, 但是我按下按钮的时候 程序就死了。
帮我解决下100.import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class E2 extends JFrame {
JLabel labels;
JButton b;
public E2(){
JPanel p=new JPanel();
labels=new JLabel("00:00");
b=new JButton();
p.add(labels);p.add(b);
getContentPane().add(p);
b.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e1){
int i=0;
int I=0;
int m=0;
int M=0;
while(true)
{ i++;
try{Thread.sleep(1000);}
catch(InterruptedException e){}
if(i==10)
{
I+=1;i=0;
}
if(I==6)
{
m+=1;I=0;
}
if(m==10)
{
M+=1;m=0;
}
labels.setText(String.valueOf(M)+String.valueOf(m)+":"+String.valueOf(I)+String.valueOf(i));
}
}});
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
}
public static void main(String args[]){new E2();}}
public void actionPerformed(ActionEvent e1) {
int i = 0;
int I = 0;
int m = 0;
int M = 0;
while (true) {
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
if (i == 10) {
I += 1;
i = 0;
}
if (I == 6) {
m += 1;
I = 0;
}
if (m == 10) {
M += 1;
m = 0;
}
labels.setText(String.valueOf(M) + String.valueOf(m) + ":"
+ String.valueOf(I) + String.valueOf(i));
labels.repaint();
}
}
});因为按下按钮后, 程序在while循环中不会出来, 所以按关闭按钮没反应, 可以把这个while循环放到一个线程中去处理.
import java.awt.*;
import java.awt.event.*;public class Test01 extends JFrame {
JLabel labels;
JButton b; public Test01() {
JPanel p = new JPanel(); labels = new JLabel("00:00");
b = new JButton();
p.add(labels);
p.add(b);
getContentPane().add(p);
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e1) {
Thread thread = new Thread() { public void run() {
int i = 0;
int I = 0;
int m = 0;
int M = 0;
while (true) {
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
} if (i == 10) {
I += 1;
i = 0;
}
if (I == 6) {
m += 1;
I = 0;
}
if (m == 10) {
M += 1;
m = 0;
}
labels.setText(String.valueOf(M)
+ String.valueOf(m) + ":"
+ String.valueOf(I) + String.valueOf(i));
labels.repaint();
}
}
};
thread.start();
} }); setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack(); } public static void main(String args[]) {
new Test01();
}}
SwingUtilities类提供了两个方法:invokeLater和invoteAndWait,它们都使事件派发线程上的可运行对象排队。当可运行对象排在事件派发队列的队首时,就调用其run方法。其效果是允许事件派发线程调用另一个线程中的任意一个代码块。