1、使用线程例子
package untitled1;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import com.borland.jbcl.layout.*;
/**
* title:
* description:
* copyright: copyright (c) 2002
* company:
* @author
* @version 1.0
*/
public class testthread extends jframe {
jpanel jpanel1 = new jpanel();
xylayout xylayout1 = new xylayout();
jbutton startbutton = new jbutton();
jbutton stopbutton = new jbutton();
mythread thread = null;
public testthread() {
try {
jbinit();
}
catch(exception e) {
e.printstacktrace();
}}
private void jbinit() throws exception {
jpanel1.setlayout(xylayout1);
startbutton.settext("start");
startbutton.addactionlistener(new java.awt.event.actionlistener() {
public void actionperformed(actionevent e) {
startbutton_actionperformed(e);
}
});
stopbutton.settext("stop");
stopbutton.addactionlistener(new java.awt.event.actionlistener() {
public void actionperformed(actionevent e) {
stopbutton_actionperformed(e);
}
});
this.getcontentpane().add(jpanel1, borderlayout.center);
jpanel1.add(startbutton, new xyconstraints(36, 105, 82, 30));
jpanel1.add(stopbutton, new xyconstraints(160, 108, 100, 31));
}
void startbutton_actionperformed(actionevent e) {
if(thread != null) thread.stop();
thread = new mythread();
thread.start();
}
void stopbutton_actionperformed(actionevent e) {
if(thread != null) thread.stop();
thread = null;
}
public static void main(string[] args)
{testthread test = new testthread();
test.setsize(300,400);
test.show();
}
private class mythread extends thread
{public mythread(){
}
public void run(){
while(true){try{
sleep(100);
}catch(interruptedexception e){}
system.out.println("this is a test!");
}}}
}
2、不使用线程的例子
package untitled1;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import com.borland.jbcl.layout.*;
public class nothread extends jframe
{
jpanel jpanel1 = new jpanel();
xylayout xylayout1 = new xylayout();
jbutton startbutton = new jbutton();
jbutton stopbutton = new jbutton();
private boolean flagtrue = true;
public static void main(string[] args)
{nothread test = new nothread();
test.setsize(300,400);
test.show();
}
public nothread() {
try {
jbinit();
}
catch(exception e) {
e.printstacktrace();
}
}
private void jbinit() throws exception {
jpanel1.setlayout(xylayout1);
startbutton.settext("start");
startbutton.addactionlistener(new java.awt.event.actionlistener() {
public void actionperformed(actionevent e) {
startbutton_actionperformed(e);
}
});
stopbutton.settext("stop");
stopbutton.addactionlistener(new java.awt.event.actionlistener() {
public void actionperformed(actionevent e) {
stopbutton_actionperformed(e);
}
});
this.getcontentpane().add(jpanel1, borderlayout.center);
jpanel1.add(startbutton, new xyconstraints(27, 149, -1, -1));
jpanel1.add(stopbutton, new xyconstraints(182, 151, -1, -1));
}
void startbutton_actionperformed(actionevent e) {
while(true){
try{
thread.currentthread().sleep(100);
}catch(interruptedexception er){}
if(flagtrue){
system.out.println("this is a test!");
}}
}
void stopbutton_actionperformed(actionevent e) {
if(flagtrue) flagtrue = false;
else flagtrue = true;
}}
总结
在不使用线程的例子中,当点击start按钮后,整个frame将不再相应任何鼠标事件(如点击stop、点击关闭按钮);
而在使用线程的例子中,点击start按钮启动线程后,frame界面可以很好的相应其它事件(如点击stop,就可以将该线程停止,点击关闭按钮则可以退出该程序)
闽公网安备 35060202000074号