2014-04-14 4 views
0

죄송합니다,이 자바 스윙 인터페이스에 뉴비입니다.SwingWorker는 아무것도 반환하지 않습니까? (자바)

그러나 나는 내가 따라 할 수있는 간단한 튜토리얼을 발견했다. Here Link1.

그렇다면 간단한 JFrame과 버튼을 만들었습니다. 버튼을 누를 때 일단이 코드를 수행합니다

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()); 
    } 

} 

}

하지만 재미있는 점은 다음과 같습니다 제출자 제공자 라이선스 계약 반면

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); 

을 실제로 하나입니다. 버튼을 누르기 만하면 호출되는 SwingWorker는 결코 처리되지 않습니다. 왜 출력이 전혀 없습니까? 나는 이미 거기에 System.out.println() -> 넣어 생각. CMIIW.

+0

['cancel'] (http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html#cancel%28boolean%29) 'SwingWorker '어떤 출력을 볼 수 있습니다. –

+0

스윙 워커를 취소 하시겠습니까? 왜 ? 나는 그것이 나를 이해하게하지 않는다는 것을 의미한다. 먼저 EXECUTE, 갑자기 취소합니까? – gumuruh

+2

이 특정 코드는 취소 될 때까지 무한 루프됩니다. 그건 당신이 보통'SwingWorker'를 작성하는 방법이 아니지만 왜 출력이 보이지 않는지 설명합니다. 또는'while' 루프 내에서 일부 작업을 수행하고 결과적으로 문자열 결과를 반환합니다. –

답변

1

자습서에서 제시된 예를 조금 지나치게 표현한 것 같습니다. 실생활에서 SwingWorker은 결과를 반환하기 전에 잘 정의 된 작업을 수행합니다. 이 튜토리얼은 단순히 이 isCancelled() 플래그를 확인하면 중단 될 수 있음을 입증하려고 시도한 것이라고 생각합니다.

예를 들어 iteratively calculate Pi으로 조정하면 정확도가 향상 될 수 있습니다. 마침내 "중지"를 누르면 작업자를 취소하고 현재 값을 반환 할 수 있습니다. 취소 할 때까지 루프는 계속 실행하고 답변을 수정합니다.

+0

감사합니다. Duncan, 이제 코드를 약간 수정합니다. 루핑이 완료되지 않은 것으로 보입니다. 내 실수 같은 거니? – gumuruh

0

저는 초보자입니다. 나는 무료로 다운로드 한 훌륭한 자바 책을 발견했다. "Java Programming Joyce Farrell 6th Edition pdf"에 대한 Google 검색을 수행하십시오. 나는 단지 3 개월 동안 자바를 배웠고 그 책은 많은 도움을주었습니다.

+0

당연히 도움이 될 감사의 형 : D – gumuruh

관련 문제