El IProgressMonitor no es capaz de realizar la llamada al método monitor.isCanceled().
Buenas tardes y espero que estés muy bien 🙂
Tengo un método en el que he escrito un nuevo IRunnableWithProgress y estoy obteniendo correctamente la barra de progreso y actualizaciones de todo el proceso, sin ningún problema.
Mi problema es que puedo ver el botón de cancelar en el diálogo de la barra de progreso, pero después de hacer clic en él, no sucede nada. En resumen, el código dentro de if(monitor.isCanceled()){ sysout(“Heloooooooooo”) }no se ejecuta en absoluto.
Por favor, echa un vistazo al ejemplo de código:
public void runMappers(final EObject profile, final EObject list, final Notification notification) {
this.notification = notification;
getBroker().stopNotification();
final ProgressMonitorDialog pmd = new ProgressMonitorDialog(Display.getCurrent().getActiveShell());
IRunnableWithProgress rwp = new IRunnableWithProgress() {
@Override
public void run(IProgressMonitor monitor) throws InterruptedException {
if (mappers.get(profile) != null) {
int workload = mappers.get(profile).size();
monitor.beginTask(“Loading DG list configurations”, workload);
Pattern pattern = Pattern.compile(“ProfileTo(.*?)ViewMapper”);
for (final ProfileToDgListViewMapper mapper : mappers.get(profile)) {
Matcher matcher = pattern.matcher(mapper.toString());
if (matcher.find()) {
monitor.subTask(“Loading DG list configuration section ” + (matcher.group(1)));
}
mapper.mapProfile(profile, list, notification);
monitor.worked(1);
if(monitor.isCanceled()){
System.out.println(“Heloooooooooo”);
monitor.done();
Thread.currentThread().interrupt();
return;
}
}
}
monitor.done();
}
};
try {
pmd.run(false, true, rwp);
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InterruptedException e) {
}
getBroker().continueNotification();
}
He intentado muchas cosas, también algunas respuestas de StackOverflow, sugiriendo realizarlo con Jobs, pero no estoy seguro de cómo puedo llamar a mi método personalizado (con algunos atributos) en el Job.
Por favor, hazme saber la mejor sugerencia
Gracias de antemano..
davy.ai
¡Hola! Parece que estás experimentando un problema con el botón de cancelar en tu barra de progreso que no funciona. Después de revisar tu muestra de código, parece que el problema puede deberse a que no estás interrumpiendo correctamente el hilo cuando se presiona el botón de cancelar.
En tu código actual, tienes las siguientes líneas en la declaración if cuando se presiona el botón de cancelar:
Lo que te falta es llamar al método
monitor.setCanceled(true)
para realmente establecer el estado de cancelación del monitor. Es probable que esto sea por lo que tu código dentro del if nunca se esté ejecutando.Para interrumpir correctamente el hilo y cancelar la tarea, modifica tu código if para que se vea así:
Esto establecerá correctamente el estado de cancelación del monitor e interrumpirá el hilo, lo que provocará que se ejecute tu código dentro del if.
Con respecto a tu pregunta acerca de llamar a tu método personalizado con algunos atributos en una tarea, puedes crear una nueva clase que extienda la clase
Job
y luego incluir tu método con sus atributos en el métodorun
de la clase de trabajo.Por ejemplo, puedes crear una nueva clase así:
Luego, para ejecutar tu método personalizado en una tarea, simplemente crea una nueva instancia de la clase
MyJob
con los atributos necesarios y llama al métodoschedule
en el objeto de la tarea para ejecutarlo:¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta.