本帖最后由 whusha 于 2009-11-04 22:32:30 编辑

解决方案 »

  1.   

    随便贴一个你,你试着改一下
    Runnable wie = new Runnable() {
    @Override
    public void run() {
    new Thread(new Runnable() {
    @Override
    public void run() {
    //Display.getCurrent()...放在这里
    }
    }).start();
    }
    };
    BusyIndicator.showWhile(Display.getCurrent(), wie);
      

  2.   


    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)
    不知道什么原因
      

  3.   

    asyncExec函数
    是指需要将指定的Runnable对象的run方法在“事件指派线程”上执行,也就是在负责界面事件响应及界面重绘的线程里执行。如果你的run方法是一个耗时操作,必然导致界面卡死.应该将耗时操作新开线程执行,而在任务执行完毕后将设置界面变化的功能代码放到"事件指派线程"上来执行
      

  4.   

    可是现在需求就是创建表的过程中动态打印创建的结果,就像杀毒软件显示正在查杀什么文件的情况那样,用swing做的时候就没有这个情况.....
    to2楼
    我把Display.getCurrent()换成shlDms.getDisplay(),可以运行了,但是效果还是原来那样
      

  5.   

    你的source结构应该是这样的,
    照你现在这种一下子建一堆表的话,是不可能不卡在那里的
    必须在你需要往屏幕上打印消息的那个时点调用asyncExec
    new Thread(new Runnable() {    public void run() {
            while (没建完){
                建表;
                shlDms.getDisplay().asyncExec(new Runnable(){
                    public void run() {
                        打印xx表创建成功;
                    }
                });
                next;
            }
         }
     }).start();