请教JAVA SWING 线程 阻塞的问题
之前我写了个程序,用于周期性的从多个服务器采集数据,并插入数据库,界面是命令行方式的。现在想修改成SWING界面方式的程序,然后在界面上添加一些组件,用颜色来显示与服务器...
之前我写了个程序,用于周期性的从多个服务器采集数据,并插入数据库,界面是命令行方式的。现在想修改成SWING界面方式的程序,然后在界面上添加一些组件,用颜色来显示与服务器的连接状态。服务器数据采集是用多线程写的。我想通过判断每次采集服务器数据是否成功,来修改SWING主界面中组件的颜色。但是发现造成了主界面的阻塞,界面卡住不能动了。我想不出用什么办法可以定时的,动态的修改主界面中组件的颜色。
请教一下各位,该如何去做呢?
最好能写一个简单的实例让我参考一下,谢谢各位了。
打个比方吧:有个文本文件里有很多行文字,每行都是true或false。
让一个线程去读取文本文件,每3秒读一行,如果是true,就让主界面上的label组件变成绿色,如果是false,就变成红色。同时,主界面不能卡住。
该如何实现呢,请大家赐教! 展开
请教一下各位,该如何去做呢?
最好能写一个简单的实例让我参考一下,谢谢各位了。
打个比方吧:有个文本文件里有很多行文字,每行都是true或false。
让一个线程去读取文本文件,每3秒读一行,如果是true,就让主界面上的label组件变成绿色,如果是false,就变成红色。同时,主界面不能卡住。
该如何实现呢,请大家赐教! 展开
1个回答
展开全部
swing所有的ui操作都是阻塞的,如果在事件处理函数中加入一个长时间无法完成的任务,那么其他事件处理函数或者UI更新都会等待它的完成,多线程并发改变UI时很容易造成死锁。解决办法请参看下面的连接:
http://developer.51cto.com/art/201005/201603.htm,也就是说如果你要在新线程里完成耗时操作,并且在该线程最后改变GUI,那么安全的做法是像下面这样进行调用。
你的线程的run方法{
你的耗时操作。。。
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GUI改变操作。。。
}
}
}
http://developer.51cto.com/art/201005/201603.htm,也就是说如果你要在新线程里完成耗时操作,并且在该线程最后改变GUI,那么安全的做法是像下面这样进行调用。
你的线程的run方法{
你的耗时操作。。。
SwingUtilities.invokeLater(new Runnable() {
public void run() {
GUI改变操作。。。
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询