有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

swing SwingWorker从不归还任何东西?(爪哇)

抱歉,我是这个Java Swing接口的新手

但我发现了一个简单的教程,我可以遵循Here Link1.

然后我创建了一个简单的JFrame和一个按钮。 按下按钮后,将执行以下代码:

 int res = -1;
    
    List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("id", jTextField1.getText()));
    urlParameters.add(new BasicNameValuePair("pass", jTextField2.getText()));
    
    Submitter m = new Submitter();
    m.setData(urlParameters);
    m.setURL(url1);
    
    m.execute(); System.out.println(m.getResult);

而提交人clas实际上是:

public class Submitter extends SwingWorker<String, Void> {

public int getResult(){
return res;
}

String line = "";
String urlTarget;
int res = -1;
StringBuffer result = new StringBuffer();
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

public String getLastResult(){
    return result.toString();
}

public void setURL(String yourURL){
    urlTarget = yourURL;
}

public void setData(List<NameValuePair> listHere){
    nameValuePairs.addAll(listHere);
}

@Override
protected String doInBackground() throws Exception {

    HttpClient client = HttpClientBuilder.create().build();

    HttpPost post = new HttpPost(urlTarget);
    try {

        post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        post.setHeader("User-Agent", "Firefox");
        
        HttpResponse response = client.execute(post);
        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));


        while ((line = rd.readLine()) != null) {
            result.append(line);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }

    return result.toString();
}

@Override
protected void done() {
    try {
        // store the output here
        String s = this.get();
        res = Integer.parseInt(s);
    } catch (InterruptedException ex) {
        System.err.println("line 119");
    } catch (ExecutionException ex) {
        System.err.println("line 121" + ex.getMessage());
    }

}

}

但有趣的是。这个SwingWorker在按下按钮后将被调用,它永远不会处理任何事情。为什么根本没有输出?我想我已经把系统放好了。出来println()->;在那边CMIIW


共 (2) 个答案

  1. # 1 楼答案

    我认为你把教程中的例子看得有点过于字面化了。在现实生活中,你的SwingWorker将在返回结果之前执行定义良好的工作。我认为本教程只是试图证明,如果您检查isCancelled()标志,SwingWorker可以被中断

    作为练习,您可以尝试将示例调整为iteratively calculate Pi,以提高准确性。当您最后点击“停止”时,它可能会取消工作进程并返回您的当前值。在取消之前,循环将继续执行并优化您的答案

  2. # 2 楼答案

    我也是java新手。我发现了一本很棒的java书,是我免费下载的。在谷歌上搜索“Java编程乔伊斯·法雷尔第六版pdf”。我学java才三个月,这本书帮了我很大的忙