GUI가 스윙을 기반으로하는 주 프로그램이 있으며 4 가지 상태 중 하나에 따라 GUI 요소에 다른 매개 변수가 있습니다.java (swing)의 다른 스레드에 의한 GUI 새로 고침
public class Frame extends JFrame implements Runnable {
Status status = 1;
...
@Override
public void run() {
switch (status) {
case 1:
...
case 2:
...
}
public void updateGUI(Status status) {
this.status = status;
SwingUtilities.invokeLater(this);
}
GUI를 새로 고치려면 적절한 매개 변수로 updateGUI 만 호출하면 모든 것이 정상입니다. 그러나 프로그램은 관련 데이터를 처리 한 후에 GUI 메인 프로그램을 변경해야하는 추가 스레드를 작성합니다. 불행히도이 스레드에서 updateGUI (..) 메서드를 호출 할 수 없습니다.
invokeLater 또는 SwingWorker를 사용하여 새로 고칠 수 있지만 10 개 이상의 요소가 있으므로 대신 udpateGUI() 메서드를 사용하는 것이 좋습니다.
나는 어떤 힌트에도 감사 할 것입니다.
이 질문에서 이벤트 및 이벤트 버스에 대한 답변을 살펴보십시오. http://stackoverflow.com/questions/7131484/how-to-pass-the-message-from-working-thread-to -gui-in-java/7131574 # 7131574 –
다른 스레드에서 updateGUI를 호출 할 수없는 이유는 무엇입니까? 상태 변수에 대한 비 동기화 된 액세스 외에도 다른 스레드에서이 메서드를 사용할 수없는 이유가 없습니다. 프레임을 호출하면 –
f = new Frame(); f.udpateGUI (..); 물론 아무 일도 일어나지 않습니다. 어떻게 그 방법을 호출 할 수 있습니까? – galica