XtremeBaumer
XtremeBaumer

Reputation: 6435

JFace close dialog in SelectionListener

How do I close a Dialog in a SelectionListener? Currently my SelectionListener looks like this:

public void widgetSelected(SelectionEvent e) {
    ICommandService commandService = (ICommandService) PlatformUI.getWorkbench()
            .getService(ICommandService.class);
    IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench()
            .getService(IHandlerService.class);

    Command command = commandService
            .getCommand("com.mainfirst.backoffice.gui.accounting.command.createBookingReversal");

    Map<String, String> params = new HashMap<String, String>();
    params.put("com.mainfirst.backoffice.gui.accounting.reversalCodeParameter",
            String.valueOf(model.getVal().getCode()));

    ParameterizedCommand paraCommand = ParameterizedCommand.generateCommand(command, params);

    try {
        handlerService.executeCommand(paraCommand, null);
    } catch (Exception ex) {
        Status status = new Status(IStatus.ERROR, AccountingActivator.PLUGIN_ID,
                "Error opening reversal wizard", ex);
        StatusManager.getManager().handle(status, StatusManager.SHOW);
        throw new RuntimeException(ex);
    }
    close();
}

As you can see I do call close();, but the Dialog does stay open in the end. Moving the call inside a finally block doesn't help either. My command opens a new Wizard in front of the Dialog. Might I have to close the Dialog before the Wizard opens?

Upvotes: 0

Views: 49

Answers (1)

greg-449
greg-449

Reputation: 111217

If you want the dialog to close before the command it is running completes you will need to run the command asynchronously. Use Display.asyncExec for this. Use something like:

public void widgetSelected(SelectionEvent e) {

    Display.getDefault().asyncExec(() ->
       {
          ... code to call command
       });

    close();
}

(assuming Java 8, use a Runnable for Java 7 or earlier).

Upvotes: 1

Related Questions