- ベストアンサー
javaのmainの中のループに割込を掛ける方法
- javaのmainの中のループに割込を掛ける方法をお教えください
- 添付コードの『Thread.currentThread().interrupt()』は、旨く機能しません
- mainメソッド内のループに割り込みをかける方法について教えてください
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> javaのmainの中のループに割込を掛ける方法をお教えください main が実行されているスレッドをインタラプトすれば良いです。 質問文のプログラムでは actionPerformed の中で Thread.currentThread().interrupt() が呼ばれていますが、イベント処理が実行されたスレッド自身に割込みを掛けているので main のスレッドには影響は有りません。 ちなみに Thread.currentThread().interrupt() によって、InterruptedException が発生する事は有りません。 なぜなら、この命令が実行されたという事はそのスレッド自身は動いているという事になるからです。 TimButton1クラスのコンストラクタに main のスレッドのThreadオブジェクトを渡すなどして、actionPerformed で main のスレッドを扱えるようにすれば良いでしょう。 例) -------------------------------- public class T_try_loop extends JFrame { JFrame frame = new JFrame(); T_try_loop(Thread mainThread) { System.out.println("aaaa"); JPanel p1 = new JPanel(); JButton button1 = new JButton("button1"); button1.addActionListener(new TimButton1(mainThread)); p1.add(button1); getContentPane().add(p1, BorderLayout.CENTER); } public static void main(String args[]){ T_try_loop frame = new T_try_loop(Thread.currentThread()); frame.setTitle("TTTT"); frame.setBounds(10,10,400,300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); for (int j = 0;j < 80; j++) { try { Thread.sleep(80); System.out.print("*"); } catch(InterruptedException e) { System.out.println(": main_loopに、今割り込まれました"); } } }//public static void main public class TimButton1 implements ActionListener{ private Thread mainThread; public TimButton1(Thread mainThread) { this.mainThread = mainThread; } @Override public void actionPerformed(ActionEvent ae){ String cmd = ae.getActionCommand(); if (cmd.equals("button1")) { mainThread.interrupt(); System.out.println("Button clicked"); } } }//public class TimButton1 }
お礼
root139さま 簡明、的確な、ご回答有難うございます。 お礼のあと、コードを改良して、勉強させて頂きます。