java - SWT 从线程中打开一个Shell的问题(在子线程中无法开启一个新的shell)
本文介绍了java - SWT 从线程中打开一个Shell的问题(在子线程中无法开启一个新的shell)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
描述:我想制作一个不阻塞线程的弹出框,所以自定义了一个Dialog,继承Dialog并实现Runnable接口。
将display作为参数传入后,获得parent shell,并实例化child shell,以此shell创建dialog。
/**
* Create the dialog.
* @param parentShell
*/
private ShowLoadingDialog(Shell parentShell) {
super(parentShell);
this.shell = parentShell;
this.display = shell.getDisplay();
label = new Label(shell, SWT.NONE);
}
public static ShowLoadingDialog getDialog(Display display){
Shell shell = new Shell(display,SWT.TITLE | SWT.BORDER|SWT.APPLICATION_MODAL);
return new ShowLoadingDialog(shell);
}
定义一个open方法,当调用此方法时,会执行自身这个Runnable对象,我把shell的open放在了线程中启动,当收到关闭shell的通知时(isShow),结束线程
@Override
public void run() {
// TODO Auto-generated method stub
if(this.show){
display.syncExec(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
shell.open();
shell.layout();
while ( ! shell.isDisposed() && isShow) {
if ( ! display.readAndDispatch()) ;
display.sleep();
}
}
});
}
}
Q1: 为什么无论我使用syscExec方法还是asyscExec方法,都无法显示出dialog
Q2:为什么将shell的open方法调用从run中移出来调用时,能显示出dilog但是程序会失去响应
(dialog的样式和坐标我已经在别的方法中设置好了,无需考虑着一点)
解决方案
我已经找到解决的办法了,忘了更新:
关于在使用Java的SWT开发UI时UI总是发生卡死的情况及解决办法
这篇关于java - SWT 从线程中打开一个Shell的问题(在子线程中无法开启一个新的shell)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文