2013-02-22 5 views
2

파일에 주어진 점 집합을 플롯하는 작은 스윙 응용 프로그램을 만들고 있습니다. 지침에 따라 다음 코드를 사용하여 GUI 용 새 스레드를 호출 할 것을 제안했습니다. 응용 프로그램의 시나리오스윙 스레드 통신

java.awt.EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      new View().setVisible(true); 
     } 
    }); 

하나는 (A JFileChooser를 사용하여 수행됩니다) 파일을 열 수 있습니다.

private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) { 
    int returnVal = fileChooser.showOpenDialog(this); 
    if (returnVal == JFileChooser.APPROVE_OPTION) { 
     File file = fileChooser.getSelectedFile(); 
     //some heavy operations 
    } else { 
     System.out.println("File access cancelled by user."); 
    } 
} 

점을 작도하기 전에 수행해야 할 과중한 작업이 있습니다.

제 질문은 GUI 스레드에 무거운 코드를 삽입하는 것이 좋습니까? 처리를 위해 주 스레드에 파일 객체를 보내고 결과를 GUI 스레드로 보낼 수 있습니까?

자바 스레딩 API에 대해서는 잘 모릅니다.

답변

4

사용 SwingWorker
SwingWorker 또 다른 배경 스레드에서 시간이 많이 걸리는 작업을 수행하는이 시간 동안 응답 GUI를 유지하여 그것을 해결하는 방법을 제안한다.

http://docs.oracle.com/javase/6/docs/api/javax/swing/SwingWorker.html을 살펴

http://www.theeggeadventure.com/wikimedia/index.php/SwingWorker_Example

http://weblogs.java.net/blog/mkarg/archive/2010/01/03/did-you-know-swingworker-can-send-progress-status

http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-swingworker.html

+0

http://www.theeggeadventure.com/wikimedia/index.php/SwingWorker_Example http://weblogs.java.net/blog/mkarg/archive/2010/01/03/did-you- know-swingworker-can-send-progress-status라는 두 링크가 도움이되었습니다. – addy