• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaのmainの中のループに割込を掛ける)

javaのmainの中のループに割込を掛ける方法

このQ&Aのポイント
  • javaのmainの中のループに割込を掛ける方法をお教えください
  • 添付コードの『Thread.currentThread().interrupt()』は、旨く機能しません
  • mainメソッド内のループに割り込みをかける方法について教えてください

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.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 }

参考URL:
http://www.ibm.com/developerworks/jp/java/library/j-jtp05236/
bakabon_X
質問者

お礼

root139さま 簡明、的確な、ご回答有難うございます。 お礼のあと、コードを改良して、勉強させて頂きます。