2011-03-26 22 views
6

Actualmente estoy trabajando en un proyecto que se está volviendo más complejo de lo que pensé que sería originalmente. Lo que pretendo hacer ahora es mostrar un diálogo de mensaje sin detener la ejecución del hilo principal en el programa. En este momento, estoy usando:Mostrando "JOptionPane.showMessageDialog" sin detener el flujo de ejecución

JOptionPane.showMessageDialog(null, message, "Received Message", JOptionPane.INFORMATION_MESSAGE); 

Pero esto hace una pausa en todo lo demás en el hilo principal, así que no muestra varios cuadros de diálogo a la vez, justo después de la otra. ¿Podría esto ser tan simple como crear un nuevo JFrame en lugar de usar JOptionPane?

Respuesta

10

De acuerdo con la docs:

JOptionPane crea JDialogs que son modal. Para crear un cuadro de diálogo no modal, debe usar la clase JDialog directamente.

El enlace de arriba muestra algunos ejemplos de cómo crear cuadros de diálogo.


Otra opción es comenzar la JOptionPane en su propio hilo o menos así:

Thread t = new Thread(new Runnable(){ 
     public void run(){ 
      JOptionPane.showMessageDialog(null, "Hello"); 
     } 
    }); 
    t.start(); 

De esta manera el hilo conductor de su programa continúa a pesar de que el cuadro de diálogo modal es hacia arriba.

+0

OP: Tenga cuidado de la modalidad de los diálogos creados por JOptionPane también sin embargo, si usted está apareciendo múltiples cuadros de diálogo a continuación es lo que realmente quiere que sean modal? – iainmcgin

+0

Gracias iainmcgin. Realmente no pensé en esto. En lugar de usar "JOptionPane.showMessageDialog", acabo de crear un nuevo JFrame que muestra el mensaje. – Brandon

+0

Ten cuidado. http://stackoverflow.com/questions/9554636/the-use-of-multiple-jframes-good-bad-practice – user2228462

0

Puede simplemente iniciar un Runnable por separado para mostrar el cuadro de diálogo y manejar la respuesta.

0

prueba este:

EventQueue.invokeLater(new Runnable(){ 
         @Override 
         public void run() { 
        JOptionPane op = new JOptionPane("Hi..",JOptionPane.INFORMATION_MESSAGE); 
        JDialog dialog = op.createDialog("Break"); 
        dialog.setAlwaysOnTop(true); 
        dialog.setModal(true); 
        dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);  
        dialog.setVisible(true); 
         } 
        }); 
Cuestiones relacionadas