1

このコードを使用して、シェルがいつ閉じられたかを知ることができます。

shell.addShellListener(new ShellAdapter()
{
    @Override
    public void shellClosed(ShellEvent e)
    {
        System.out.println("closed");
    }
}

しかし、ShellEventオブジェクトは、シェルがプログラムによって閉じられたのか、ユーザーが X ボタンをクリックしたときに閉じられたのかを教えてくれません。

伝える方法はありますか?

4

1 に答える 1

2

Close がUserShellEventによって生成されたのか、Systemによって生成されたのかを区別するために、少し時間を費やしました。

両方のケースを検査した後ShelEvent、ObjectGraph 全体で異なる値を持つ唯一の変数はShellEventcaptureChangedスコープDisplaydefault

以下のコードは、ソースを見つけるのに役立ちますShellEvent

shell.addShellListener(new ShellAdapter() {
        @Override
        public void shellClosed(ShellEvent e) {

                Field f = Display.class.getDeclaredField("captureChanged");
                f.setAccessible(true);
                System.out.println("captureChanged = " + f.get(e.display)); //true = If User triggered the Event
                System.out.println("closed");
        }
    });
于 2013-07-14T10:33:59.040 に答える