Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swingworker无法使用swt?_Java_Eclipse_Multithreading_Swt_Swingworker - Fatal编程技术网

Java Swingworker无法使用swt?

Java Swingworker无法使用swt?,java,eclipse,multithreading,swt,swingworker,Java,Eclipse,Multithreading,Swt,Swingworker,我正在做一个项目,需要用Java从web页面获取页面内容,有时,我需要在web页面上执行一些javascript,然后他们得到修改后的内容。所以我选择使用SWT工具。以下是代码的一部分: public void run(){ Display.getDefault().asyncExec(new Runnable(){ public void run(){ display = Display.getDefault();

我正在做一个项目,需要用Java从web页面获取页面内容,有时,我需要在web页面上执行一些javascript,然后他们得到修改后的内容。所以我选择使用SWT工具。以下是代码的一部分:

public void run(){
    Display.getDefault().asyncExec(new Runnable(){
            public void run(){
                display = Display.getDefault();
                shell = new Shell(display,SWT.CLOSE | SWT.MIN |SWT.TITLE);
                shell.setText("Web Page");
                shell.setSize(1024,768);
                browser = new Browser(shell, SWT.NONE);
                browser.setBounds(0, 0, 1010,700);
                browser.addProgressListener(new ProgressListener() {
                    @Override
                    public void completed(ProgressEvent event) {
                        boolean success = browser.execute(script);
                        if(success || script.length()==0){
                            model.setHtml(browser.getText());
                        }
                        shell.dispose();
                    }

                    @Override
                    public void changed(ProgressEvent event) {

                    }
                });
                browser.setUrl(url);

                while (!shell.isDisposed()) {
                    if (!display.readAndDispatch()) {
                        display.sleep();
                    }
                }
            }
        });
}
我在类
worker
中调用
run()
函数,该类从
SwingWorker
扩展而来。工人类的定义如下:

public class worker extends SwingWorker<Object,Integer>{

private ScrapingModel model;
private ScrapingView  view;
private int[] indices;

public worker(ScrapingView v, ScrapingModel m, int[] ins){
    model = m;
    view = v;
    indices = ins; 
}
@Override
protected Object doInBackground() throws Exception {
    int length = indices.length;
    for(int i=0;i<indices.length;i++){
        int index = indices[i];
        //here call the run() function, sorry I skipped some code
        publish((i+1)*100/length);
    }
    return null;
}
@Override
protected void process(List<Integer> chunks) {
    for (Integer chunk : chunks) {
        view.progressBar.setValue(chunk);
    }
}
}
公共类worker扩展SwingWorker{
私有刮削模型;
私有ScrapingView视图;
私人指数;
公共工作者(ScrapingView v,ScrapingModel m,int[]ins){
模型=m;
视图=v;
指数=ins;
}
@凌驾
受保护对象doInBackground()引发异常{
int length=index.length;

对于(int i=0;i而不是将
Runnable
包装到
asyncExec

Display.getDefault().asyncExec(new Runnable(){
  // swt code to open shell
 });
创建一个新的
线程

Runnable r = new Runnable(){
  // swt code to open shell
 }
 Thread t = new Thread(r);
 th.start();