将循环移动到ActionListener外部或在内部使用线程来执行循环。例如:
// 错误示例:在ActionListener中包含循环 JButton btn = new JButton("Click me"); btn.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ for(int i=0; i<10; i++){ // 错误,在ActionListener中包含循环 System.out.println(i); } } });
// 解决方法1:将循环移动到ActionListener外部 JButton btn2 = new JButton("Click me"); for(int i=0; i<10; i++){ // 将循环移动到ActionListener外部 final int index = i; btn2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.out.println(index); } }); }
// 解决方法2:在内部使用线程来执行循环 JButton btn3 = new JButton("Click me"); btn3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ new Thread(new Runnable(){ public void run(){ for(int i=0; i<10; i++){ // 在内部使用线程来执行循环 System.out.println(i); } } }).start(); } });