10

Display.getActiveShell()シェルがフォーカスされている場合にのみ、シェルをアクティブと見なすようです。現時点で別のアプリケーションがフォーカスを持っている場合、それは return を意味しDisplay.getActiveShell()ますnull

SWT アプリケーションがフォーカスされていない場合でも、SWT アプリケーションでどのシェルがフォーカスされているかを常に教えてくれるメソッドが必要です。

私はすぐにこのコードを一緒にハックしましたが、時々次のようになりますAssertionException:

public static Shell getActiveShell() {
    Display display = Display.getDefault();
    Shell result = display.getActiveShell();

    if (result == null) {
        Shell[] shells = display.getShells();
        for (Shell shell : shells) {
            if (shell.getShells().length == 0) {
                if (result != null)
                    throw new AssertionException();
                result = shell;
            }
        }
    }

    return result;
}

独自のメソッドを作成する以外に、この問題に取り組む標準的な方法はありますか?

4

1 に答える 1