2017-09-08 5 views
0

DialogSelectionListenerにクローズするにはどうすればよいですか?あなたは、私がclose();を呼び出して行う見ることができますが、Dialogが最後に開いたままんのでSelectionListenerのJFaceクローズダイアログ

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(); 
} 

:現在、私のSelectionListenerは次のようになります。 finallyブロック内でコールを移動することは役に立ちません。私のコマンドは、Dialogの前に新しいWizardを開きます。 Wizardが開かれる前にDialogを閉じなければなりませんか?

+0

@ greg-449は質問を編集しました。 [ここ](https://stackoverflow.com/questions/46113246/jface-disable-finish-button-in-wizard)は私の2番目の質問です – XtremeBaumer

+0

コマンドは何をしますか?コマンドが終了する前にダイアログが閉じることを期待していますか? –

+0

このコマンドはハンドラを呼び出し、このハンドラはウィザードを開くだけです。私は、ボタンがクリックされるとすぐにダイアログが閉じることを期待しますが、コマンドはまだ実行されるべきです – XtremeBaumer

答えて

1

実行中のコマンドが完了する前にダイアログを閉じるには、コマンドを非同期に実行する必要があります。これにはDisplay.asyncExecを使用してください。 (Javaの7またはそれ以前のためRunnableを使用し、Javaの8を想定)

public void widgetSelected(SelectionEvent e) { 

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

    close(); 
} 

:のようなものを使用してください。

関連する問題