Java - org.jdesktop.application.Task PROBLEMA!

   
Vista:

org.jdesktop.application.Task PROBLEMA!

Publicado por Emilio (3 intervenciones) el 17/09/2010 20:04:24
Hola!

estoy desarrollando una aplicación de escritorio con NetBeans... y tengo el siguiente problema.

Uso acciones añadidas a un botón por IDE mediante @Action que disparan por ejemplo una consulta SQL y llenan una tabla u otra acción..

todo va de lujo cuando hago click en el botón...

en este caso particular tengo una tabla donde cada fila es una persona y al presionar el botón seleccionar realiza la consulta sql y muestra los datos de esa persona.. utilizé en la acción la opción de TASK, para que cree un hilo ya que el servidor de SQL está en otro host y a veces se puede demorar la respuesta..

elproblema surgió cuando traré de hacer más práctica para el usuario a la aplicación así que programe el evento de mouseclicked en la tabla y pregunto si el conteo de clicks es dos ejecuto el mismo método que ejecuta presionar el botón que lleva la anotación.. @Action simplemente para que mediante un doble click se dispare la consulta..

siendo que cuando al método lo ejcuta el click del botón funciona de lujo.. no veo porque teóricamente no debería ocurri lo mismo si lo llamo desde otro código, pero el caso es que cuando lo llamo desde el evento mouseclicked (siempre generado con Netbeans) este entra en un ciclo infinito.. y no comprendo porqué! ni como solucionarlo..

Por favor espero que puedan ayudarme, desde ya muchas gracias

acá les dejo el código del problema en cuestón y luego el código completo de la clase:

-----------------------------------------------------------------

private void jTableBuscarClientesMouseClicked(java.awt.event.MouseEvent evt)
{
if (evt.getClickCount() == 2)
{
seleccionar();
}
}

@Action()
public Task seleccionar()
{
return new SeleccionarTask(org.jdesktop.application.Application.getInstance());

}// seleccionar

private class SeleccionarTask extends org.jdesktop.application.Task<Object, Void> {
SeleccionarTask(org.jdesktop.application.Application app) {
// Runs on the EDT. Copy GUI state that
// doInBackground() depends on from parameters
// to SeleccionarTask fields, here.
super(app);
comienzoEspera();

}
@Override protected Object doInBackground() {
// Your Task's code here. This method runs
// on a background thread, so don't reference
// the Swing GUI from here.
seleccionarTask();
return null; // return your result
}
@Override protected void succeeded(Object result) {
// Runs on the EDT. Update the GUI based on
// the result computed by doInBackground().
finEspera();
}
}

private void seleccionarTask()
{
Cliente clteSeleccionado;
int indiceFilaSeleccionada = jTableBuscarClientes.getSelectedRow();

// es importante que el String ene ste caso "Num. Doc." sea igual a como se le pone al nombre de la
// columna de la tabla, porque eso se obtiene al ppio después del init components donde el usuario todavía
// no pudo mover las columnas de lugar
int columnaDNI = getIndiceColumna(jTableBuscarClientes,nombreColumnaDni);

if (indiceFilaSeleccionada != -1)
{

Integer dni = (Integer) jTableBuscarClientes.getValueAt(indiceFilaSeleccionada, columnaDNI);

clteSeleccionado = buscarCli(listaCltesResultado,dni);

if (fetchTramites)
{
clteSeleccionado = controlador.getClienteJpaController().findByNroDocConTram(clteSeleccionado.getNroDoc());
fetchTramites = false;
}

controlador.mostrarProximaPantallaBuscarCliente(this,clteSeleccionado);

}
else
{
Controlador.showMessage(this,"SELECCIÓN INVÁLIDA","PRIMERO DEBE SELECCIONAR UN CLIENTE DE LA LISTA", Controlador.TipoMensaje.ERROR);
}
}


///////////////////////////////////

aquí la clase completa

//////////////////////////////////

download from

http://www.mediafire.com/?6ce9ay3nbn9fs9u

or

http://www.mediafire.com/file/6ce9ay3nbn9fs9u/clasejava.rar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder