2013-10-01 5 views
6

Ich verwende den folgenden Code, um JDialog in der Taskleiste anzuzeigen, und funktioniert perfekt in JDK 1.6.Anzeige von JDialog in der Taskleiste funktioniert nicht

public class test8 { 
    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      public void run() { 
       JDialog d = new JDialog((Frame)null,Dialog.ModalityType.TOOLKIT_MODAL); 
       d.setTitle("title"); 
       d.setSize(300,200); 
       d.setVisible(true); 
       System.exit(0); 
      } 
     }; 
     EventQueue.invokeLater(r); 
    } 
} 

Aber Wenn ich die Modalität Art mit der Methode Einstellung arbeitet es nicht

public class test8 { 
    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      public void run() { 
       JDialog d = new JDialog(); 
       d.setTitle("title"); 
       d.setSize(300,200); 
       d.setModalityType(Dialog.ModalityType.TOOLKIT_MODAL); 
       d.setVisible(true); 
       System.exit(0); 
      } 
     }; 
     EventQueue.invokeLater(r); 
    } 
} 

Was ist der Unterschied betwwen den beiden Codes? Gibt es eine Möglichkeit, dies mit der Methode zu lösen?

+1

Gute Frage, das gleiche mit Java 7/Win 7 (keine Taskleiste im zweiten Fall), scheint ein JDK-Fehler zu sein. – lbalazscs

Antwort

6

Das Problem ist, dass bestimmte Konstruktoren von JDialog einen Dummy-Frame-Besitzer erstellen, wenn der Besitzer null aus historischen Gründen ist. Aber ein Dialogdarf nicht haben einen Besitzer, um wie ein Top-Level-Fenster sichtbar zu sein. I.e.

JDialog d=new JDialog((Window)null); 
d.setModalityType(ModalityType.TOOLKIT_MODAL); 
d.setVisible(true); 

wird funktionieren.

+0

Ya .. Danke @Holger – Nikhil