swt多线程问题 本帖最后由 whusha 于 2009-11-04 22:32:30 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 随便贴一个你,你试着改一下Runnable wie = new Runnable() { @Override public void run() { new Thread(new Runnable() { @Override public void run() { //Display.getCurrent()...放在这里 } }).start(); } }; BusyIndicator.showWhile(Display.getCurrent(), wie); public void widgetSelected(SelectionEvent e) { Properties config=new Properties();//记录配置项 try { config.load(new FileInputStream("integrate.properties")); config.setProperty("password",text_5.getText()); FileOutputStream outputFile = new FileOutputStream("integrate.properties"); config.store(outputFile, "test"); outputFile.close(); } catch (Exception e1) { // TODO 自动生成 catch 块 e1.printStackTrace(); } Runnable wie = new Runnable() { public void run() { // TODO 自动生成方法存根 new Thread(new Runnable() { public void run() { Display.getCurrent().asyncExec(new Runnable(){ public void run() { SqlFileExecutor sfe=new SqlFileExecutor(text_2);//这一行报错 try { sfe.execute("data.sql"); } catch (Exception e) { // TODO 自动生成 catch 块 e.printStackTrace(); } } }); } }).start(); } }; BusyIndicator.showWhile(Display.getCurrent(), wie); }改成这样了,但是报Exception in thread "Thread-0" java.lang.NullPointerException at dmsGui.SWTe_1$2$1$1.run(SWTe_1.java:253) at java.lang.Thread.run(Unknown Source)不知道什么原因 asyncExec函数是指需要将指定的Runnable对象的run方法在“事件指派线程”上执行,也就是在负责界面事件响应及界面重绘的线程里执行。如果你的run方法是一个耗时操作,必然导致界面卡死.应该将耗时操作新开线程执行,而在任务执行完毕后将设置界面变化的功能代码放到"事件指派线程"上来执行 可是现在需求就是创建表的过程中动态打印创建的结果,就像杀毒软件显示正在查杀什么文件的情况那样,用swing做的时候就没有这个情况.....to2楼我把Display.getCurrent()换成shlDms.getDisplay(),可以运行了,但是效果还是原来那样 你的source结构应该是这样的,照你现在这种一下子建一堆表的话,是不可能不卡在那里的必须在你需要往屏幕上打印消息的那个时点调用asyncExecnew Thread(new Runnable() { public void run() { while (没建完){ 建表; shlDms.getDisplay().asyncExec(new Runnable(){ public void run() { 打印xx表创建成功; } }); next; } } }).start(); oracle 插入数据问题 JAVA的一个小问题~ return的用法是什么啊? JLabel里显示时间 用opi包把汉字写入excel里,出现乱码!! jsp 有什么好用的调试工具 关于JAVA的简单的问题! 请高手帮我理解一下这个错误! Add File/Pakage java ExecutorService线程 中断调度 请教java正则转义字符的问题. 请教高手
Runnable wie = new Runnable() {
@Override
public void run() {
new Thread(new Runnable() {
@Override
public void run() {
//Display.getCurrent()...放在这里
}
}).start();
}
};
BusyIndicator.showWhile(Display.getCurrent(), wie);
public void widgetSelected(SelectionEvent e) {
Properties config=new Properties();//记录配置项
try {
config.load(new FileInputStream("integrate.properties"));
config.setProperty("password",text_5.getText());
FileOutputStream outputFile = new FileOutputStream("integrate.properties");
config.store(outputFile, "test");
outputFile.close();
} catch (Exception e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
Runnable wie = new Runnable() { public void run() {
// TODO 自动生成方法存根
new Thread(new Runnable() { public void run() {
Display.getCurrent().asyncExec(new Runnable(){ public void run() {
SqlFileExecutor sfe=new SqlFileExecutor(text_2);//这一行报错
try {
sfe.execute("data.sql");
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
});
}
}).start();
}
}; BusyIndicator.showWhile(Display.getCurrent(), wie);
}
改成这样了,但是报
Exception in thread "Thread-0" java.lang.NullPointerException
at dmsGui.SWTe_1$2$1$1.run(SWTe_1.java:253)
at java.lang.Thread.run(Unknown Source)
不知道什么原因
是指需要将指定的Runnable对象的run方法在“事件指派线程”上执行,也就是在负责界面事件响应及界面重绘的线程里执行。如果你的run方法是一个耗时操作,必然导致界面卡死.应该将耗时操作新开线程执行,而在任务执行完毕后将设置界面变化的功能代码放到"事件指派线程"上来执行
to2楼
我把Display.getCurrent()换成shlDms.getDisplay(),可以运行了,但是效果还是原来那样
照你现在这种一下子建一堆表的话,是不可能不卡在那里的
必须在你需要往屏幕上打印消息的那个时点调用asyncExec
new Thread(new Runnable() { public void run() {
while (没建完){
建表;
shlDms.getDisplay().asyncExec(new Runnable(){
public void run() {
打印xx表创建成功;
}
});
next;
}
}
}).start();