Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Retraso indeseado para abrir nuevo JDialog

Cordial saludo, tengo en un JDialog un botón que mediante un proceso abre Conexiones de red y también abre otro JDialog, el problema se presenta en que al presionar el botón, abre inmediatamente la ventana de Windows de conexiones de red, pero, 12 segundos después abre el otro JDialog, no me explico por que lo abre tanto tiempo después. La idea es que ambas ventanas se abran al tiempo. El código es el siguiente:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
drtr2 abrir_drtr2 = new drtr2();
abrir_drtr2.setVisible(true);



String s = null;

try {

// Determinar el sistema operativo
String so = System.getProperty("os.name");

String comando;

// Comando para Linux
if (so.equals("Linux"))
comando = "ifconfig";

// Comando para Windows
else
comando = "CONTROL NETCONNECTIONS";

// Se ejecuta el comando
Process p = Runtime.getRuntime().exec(comando);

BufferedReader stdInput = new BufferedReader(new InputStreamReader(
p.getInputStream()));

BufferedReader stdError = new BufferedReader(new InputStreamReader(
p.getErrorStream()));

// Se lee la salida del comando
System.out.println("Ésta es la salida standard del comando:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}

// Lectura de errores
System.out.println("Errores a continuación:\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
}

//System.exit(0);
} catch (IOException e) {
System.out.println("Excepción: ");
e.printStackTrace();
//System.exit(-1);
}


dispose();

}


Gracias por cualquier indicación al respecto.

julio 25, 2014 | Unregistered Commenterleo

Los listeners de Swing deben ejecutarse lo más rápidamente posible, por lo que si un bloque de código puede tardar un tiempo largo e indeterminado en ejecutarse, debe colocarse dentro de una tarea paralela.
Si esa tarea actualiza de algún modo el UI de Swing, debe usarse SwingWorker, en caso contrario puede usarse un Runnable o un Callable.
En cualquier caso, siempre se debe evitar que tareas lentas se ejecuten dentro del EDT de Swing.

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

http://docs.oracle.com/javase/tutorial/essential/concurrency/exinter.html

julio 25, 2014 | Registered Commenterchoces

Gracias por la aclaración, mejor voy a separar las tareas en botones independientes.

julio 25, 2014 | Unregistered Commenterleo

Guenas.

Eso no te servira de mucho. Todos los botones se ejecutan en el mismo Thread y por tanto secuencialmente.

Desde los botones que te interesen, si quieres ejecutar tareas largas usa un hilo nuevo para ellas.

Los listeners solo deben actuar como disparadores. Nunca como ejecutores a menos que la tarea sea ignorable en cuanto recursos.

Un saludo

julio 26, 2014 | Unregistered CommenterPaposo