服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

使用多线程技术让你的swing及时响应各类事件

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,就可以将该线程停止,点击关闭按钮则可以退出该程序)

扫描关注微信公众号