7

このモジュールは、アプリケーションCOMMの複数の部分(SWT Ui側、バックエンドなど)で使用されています。このモジュールにはsendMessageメソッドがあり、呼び出し元のスレッド(UIでこれを使用する場合)がSWTUIスレッドであるかどうかを判断するルーチンを追加します。そして、プログラマーにUIスレッドから時間のかかる操作を行おうとしていることを警告します...これは悪いことです:)

もちろん、(COMMからの)UIモジュールへの依存関係を追加しないことでこれを実行したいと思います。

呼び出し元のスレッドがSWTUIスレッドであるかどうかを確認するにはどうすればよいですか?

ありがとう、ミルセア

4

2 に答える 2

10

を呼び出しDisplay.getThread()て、アプリケーションの現在の UI スレッドを取得できます。

SWT UI に依存したくない場合は、リフレクションを使用する必要があります。例えば:

public static boolean isUIThread()
{
    Object uiThread = null;

    try
    {
        Class displayClass = Class.forName("org.eclipse.swt.widgets.Display");
        Method getDefaultMethod = displayClass.getDeclaredMethod("getDefault", new Class[] { });
        Object display = getDefaultMethod.invoke(null, new Object[] { });

        Method getThreadMethod = displayClass.getDeclaredMethod("getThread", new Class[] { });
        uiThread = getThreadMethod.invoke(display, new Object[] { });
    }
    catch(Exception e)
    {
        log.warn("Could not determine UI thread using reflection", e);
    }

    return (Thread.currentThread() == uiThread);
}
于 2012-08-14T13:28:19.207 に答える