2013-12-13 3 views
1

나는 초보자가 아니라 교수이기도하다. Java에서. 나는 isReachable() 메서드를 사용하여 주어진 ip 범위에 ping을 보내는 내 응용 프로그램에 progressBar를 추가하려고합니다. 어떻게 추가 할 수 있습니까? do 작업과 스레드 사용을 모른다. progressBar에 대한 java 문서를 읽었지만 ı couldnt 추가. 루프 핑에 의해 스캔 opearation을하는 동안 여기, 내 코드동안 진행률 표시 줄을 추가하는 방법? Java

final JButton btnScan = new JButton("Scan"); 
btnScan.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
     Runtime rt = Runtime.getRuntime(); 
     String lastIpCheck = " "; 
     String ip = textField.getText(); 
     String lastIp = textField_1.getText(); 
     String parsedOutput= " "; 
     InetAddress inet; 
     boolean reachable; 

     while(!(lastIpCheck.equalsIgnoreCase(lastIp))) { 
      try { 
       inet = InetAddress.getByName(ip); 
       reachable = inet.isReachable(2500); 
       String output=null; 
       lastIpCheck = f.nextIpAddress(ip); 

       if(reachable) { 
        model.addElement(ip); 
       } 

       ip = lastIpCheck; 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
    } 
}); 

내가 스캔 작업에 대한에의 ProgressBar를 추가 할 수 있습니다.

도와주세요. 감사합니다. 불량 언어로 죄송합니다.

+0

"작업 및 스레드 사용법을 모른다"[book] (http://jcip.net/), [tutorial] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)을 읽으십시오.), 기타 [javadocs] (http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html). 그래서 1 질문에서 모든 것을 배우는 것은 잘못된 곳입니다. – zapl

+0

제안 해 주셔서 감사합니다. 내일까지 숙제가 있습니다. 조언 해 주셔서 감사합니다. 나는 읽을 것이다. 그것을하는 방법에 대한 제안이 필요합니다. – cantas

+0

http://docs.oracle.com/javase/7/docs/api/javax/swing/JProgressBar.html#setValue(int)이 부분에 대해 이해하지 못합니까? – Cruncher

답변

5

내 게시물에 대해 볼 수있는 것이 있다면, 스윙에서 장기 실행 작업을 수행하는 동안 UI를 계속 유지하려고하는 것입니다.

불행하게도, 스윙은 단일 스레드 윈도우 시스템과 UI를 차단합니다 장기 실행 작업을 만들려고합니다.

Java 1.6부터 Swing SDK에는 SwingWorker라는 클래스가 포함되어 있습니다. SwingWorker는 다른 스레드에서 이러한 종류의 작업을 수행하는 동시에 UI 스레드에 후크를 제공하여 프로세스가 어떻게 진행되고 있는지 사용자가 계속 업데이트 할 수 있도록합니다.

기본 예제는 Java 자습서에 나와 있습니다.

SwingWorker worker = new SwingWorker<ImageIcon[], Void>() { 
@Override 
public ImageIcon[] doInBackground() { 
    final ImageIcon[] innerImgs = new ImageIcon[nimgs]; 
    for (int i = 0; i < nimgs; i++) { 
     innerImgs[i] = loadImage(i+1); 
    } 
    return innerImgs; 
} 

@Override 
public void done() { 
    //Remove the "Loading images" label. 
    animator.removeAll(); 
    loopslot = -1; 
    try { 
     imgs = get(); 
    } catch (InterruptedException ignore) {} 
    catch (java.util.concurrent.ExecutionException e) { 
     String why = null; 
     Throwable cause = e.getCause(); 
     if (cause != null) { 
      why = cause.getMessage(); 
     } else { 
      why = e.getMessage(); 
     } 
     System.err.println("Error retrieving file: " + why); 
    } 
} 

}}; http://docs.oracle.com/javase/tutorial/uiswing/concurrency/simple.html

에서 :

기본적으로 당신이 doInBackgroundMethod에서 Ping 요청을 실행하고 get() 메소드 여기

로 UI를 업데이트 유지하기 위해 자신의 SwingWorker의를 정의 할 수 있습니다하면 자바 튜토리얼에 대한 링크입니다 Wikipedia에는 ​​SwingWorker 사용 방법에 대한 자세한 설명이 나와 있습니다. http://en.wikipedia.org/wiki/SwingWorker

희망 사항은이 문제를 해결하는 데 도움이되기를 바랍니다.

좋습니다.

+0

@Kuraokami 감사합니다. 정말 유용합니다. – cantas

+0

좀 더 도와 주실 수 있습니까? 나는 그것을 할 수 없다. 좀 더 명확하게 해주는 법을 설명해 주시겠습니까? – cantas

관련 문제