Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Sincronización de eventos

Hola al todos,
tengo un problema con el inicio de un servicio, les comento como esta la cosa, el siguiente código esta en un jframe, lo que hace es procesar archivos y meterlos a base de datos:

private void BStartActionPerformed(java.awt.event.ActionEvent evt) {
File[] files = FileController.finder(JTFPath.getText());
StringTokenizer st = new StringTokenizer(JTFS.getText(),",");
String ip = st.nextElement().toString();
String port = st.nextElement().toString();
String db = st.nextElement().toString();
String user = st.nextElement().toString();
String password = st.nextElement().toString();
if (files.length != 0) {
//Conexion con = new Conexion("192.0.0.161", "1433", "LALA_FE", "btobfact", "facelec3");
Conexion con = new Conexion(ip, port, db, user, password);
con.conecta();
Invoice_LALA_to_BD mapping;
String[] result;
for (int i = 0; i < files.length; i++) {
mapping = new Invoice_LALA_to_BD();
result = mapping.mapping_inhouse_to_db(JTAProcessed, JTAError, con, files[i].getAbsolutePath());
if (result[1] == "true")
JTAProcessed.append("Processed invoice: " + result[0] + "\n");
else
JTAError.append("Invoice error: " + result[0] + "\n");
files[i].delete();
}
con.desconecta();
try {
Thread.sleep(5000);
}
catch (InterruptedException ex) {
// TODO Auto-generated catch block
ex.printStackTrace();
}
}

el problema es que no puedo hacer que presionando un jbutton el servicio se quede ejecutandose indefinidamente hasta que presione otro boton de Stop, ya que hasta que no termina la ejecución el JFrame no libera el boton de start y se queda como presionado. alguien me podría decir u orientar que hacer?

Gracias...

enero 23, 2012 | Unregistered Commenteryuen

Creo que deberías separar por completo los eventos de Swing con el procesamiento de datos.
El evento debería crear una tarea paralela, en un thread o usando SwingWorker, y terminar.
Lo que te sucede es que todo el procesamiento se realiza dentro de un evento del EDT, por lo que hasta que no termine, no libera la entrada correspondiente en la cola del EDT, y todo el GUI se queda paralizado.

enero 23, 2012 | Registered Commenterchoces