0

透明なウィンドウ オーバーレイを表示する方法があるので、クリックで画面上の四角形のコーナー ポイントを示すことができます。

public Point getClickPoint(){
        JFrame frame = new JFrame("");
        MyMouseListener mouseL = new MyMouseListener();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setUndecorated(true);
        makeTranslucent(frame, Float.valueOf(0.40f));
        frame.setSize(toolkit.getScreenSize());
        frame.setVisible(true);

      frame.addMouseListener(mouseL);
        while(!mouseL.done){
            try {
                Thread.sleep(4);
                } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
 }

これを通常の方法で呼び出すと正常に動作しますが、ボタンを押して呼び出すとハングし、クリックが登録されず、最終的にフリーズします。

 Button.addActionListener(new ActionListener() { 
        public void actionPerformed(ActionEvent actionEvent) {
        getClickPoint();
    }
}

これは、アクション リスナーによって最初に呼び出されたという事実と関係がありますか?

4

1 に答える 1

3

Event Dispatch Threadをブロックしています。メソッドは EDT で呼び出されるためactionPerformed、while ループによってgetClickPointEDT がイベント (待機中のマウス イベントを含む) を処理できなくなり、プログラムが応答しなくなります。

時間のかかるタスク (ブロッキングなど) を実行する必要がある場合は、 を参照してくださいSwingWorker

于 2012-05-26T14:05:28.523 に答える