2013-07-09 1 views
4

지문 스캐너를 사용할 수있는 JNI와 인터페이스하고 있습니다. 필자가 작성한 코드는 스캔 된 ByteBuffer를 JNI가 파싱 한 후 BufferedImage로 저장하여 저장합니다.스레드에서 플래그 변수 가져 오기 및 설정

내가 알 수없는 것은 내 GUI의 jlabel 아이콘이 업데이트되기 전에 스캔 스레드가 끝날 때까지 기다리는 방법입니다. 이 작업을 수행하는 가장 쉬운 방법은 무엇입니까?

추가로 필요한 항목이 있습니까?

편집합니다 스캔 스레드의 끝에

//Scanner class 
Thread thread = new Thread() { 
     public void run() { 
      // [...] get ByteBuffer and Create Image code 
      try { 
       File out = new File("C:\\Users\\Desktop\\print.png"); 
       ImageIO.write(padded, "png", out); 
       // [???] set flag here 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }; 
thread.start(); 
return true; 

//Gui class 
private void btnScanPrintActionPerformed(java.awt.event.ActionEvent evt) { 
    Scanner scanPrint = new Scanner(); 
    boolean x = scanPrint.initDevice(); 
    //Wait for the scanning thread to finish the Update the jLabel here to show 
    //the fingerprint 
} 
+0

스캔 스레드 내부에서 실행되는 코드를 표시 할 수 있습니까? – mthmulders

답변

3

UI에 Swing 또는 Android를 사용하고 있지만 메인 이벤트 발송 스레드에 알리고 싶다면 (스윙에서는이를라고 부름) 확실하지 않습니다. 스캔 스레드를 실행 한 다음 완료되면 버튼에 수행 할 작업과 함께 EDT에 '메시지'를 보냅니다.

Thread thread = new Thread(new Runnable(){ 
    public void run(){ 
     //scan 
     SwingUtiltilies.invokeLater(new Runnable(){ 
       //here you can update the the jlabel icon 
       public void run(){ 
        jlabel.setText("Completed"); 
       } 
     }); 
    } 
}); 

UI 개발에서는 항상 EDT가 응답하기를 원하기 때문에 작업을 완료 할 때까지 기다리지 않아도됩니다.

+0

+12 간단히 말해 GUI가 대기 할 때 화면을 업데이트하지 않고 정지합니다. –

+0

감사합니다 !!! : D 마지막으로, 나는 당신을 사랑한다고 생각합니다 ... 호모가 아닙니다. 하지만 진지하게 감사드립니다. 나는 이것을 며칠 동안 붙들고있다. 내가 스레드를 동기화하고 내 자신의 뮤텍스 클래스를 만들려고했다. 이것은 훨씬 간단합니다. 이제 아이콘 크기를 조정해야합니다. 감사합니다. – DeanMWake

+1

@MethodMan cool. 그런 다음 대답을 수락하십시오. :) – zEro

0

, 검사 결과와 GUI를 업데이트 할 SwingUtilities.invokeLater()를 사용합니다.

관련 문제