2010-11-30 5 views
2

2 개의 다른 작업 수신기에서 일부 조건이 충족되면 대화 상자가 표시됩니다. 두 동작 수신기 모두 대화 상자를 표시해야하는 경우 동시에 두 개의 대화 상자가 표시됩니다. 그러나 나는 하나씩 보여주기를 바란다.invokeLater를 사용하여 하나씩 대화 상자를 표시합니다.

간체 코드 :

 SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 1"); 
      } 
     }); 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       JOptionPane.showMessageDialog(getTopLevelAncestor(), "dialog 2"); 
      } 
     }); 

사람들이 "SwingUtilities.invokeLater"호출

가 다른 클래스에 있습니다.

+0

2 개의 다른 ActionListens가 동시에 호출되는 이유는 무엇입니까? 디자인 문제 같은데. 다중 편집 (또는 무엇이든)을 수행하는 단일 ActionListener가 있어야합니다. 그런 다음 각 편집을 개별적으로 호출하고 표시 대화 상자를 개별적으로 표시 할 수 있습니다. – camickr

답변

1

그것에 대해 추적하는 클래스를 만듭니다. 이 클래스는 표시 할 대화 상자의 대기열을 포함합니다. 대화 상자가 닫힐 때마다 큐의 첫 번째 큐가 표시되고 큐에서 제거됩니다. 다른 클래스가 대화 상자를 표시해야하는 경우 대기열이 비어 있거나 다른 대기열에 삽입 된 경우 바로 표시됩니다.

1

이것은 대화 상자의 양식과 관련이 있습니다. 이 주제에 대해 매우 유용한 기사가 있습니다 http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/modality/. 대화 상자에는 우선 순위가 다른 여러 유형 유형이 있습니다. 우선 순위가 낮은 두 번째 대화 상자를 만들어 문제를 해결할 수 있습니다.

JOptionPane pane = new JOptionPane("dialog 2", JOptionPane.INFORMATION_MESSAGE); 
JDialog dialog = pane.createDialog("Message"); 
dialog.setModalityType(Dialog.ModalityType.DOCUMENT_MODAL); 
dialog.setVisible(true); 

이 정보가 도움이되기를 바랍니다.

+0

아니요, 작동하지 않습니다. 동시에 2 개의 대화 상자가 표시됩니다. –

+0

타이밍 문제가있을 수 있습니다. 짧은 연속으로 이벤트 디스패치에서 두 개의 대화 상자가 호출 될 때 작동합니다. 다른 클래스에서 제출할 때 상황이 다를 수 있습니다. – JooMing

0

invokeAndWait()이 필요합니다.이 메서드는 Runnable이 완료 될 때까지 대기합니다.

또는 상황에 따라 첫 번째 대화 상자가 닫힌 경우.

관련 문제