只要按下按钮,我就会尝试重复调用方法。但是我得到了一个无限循环。有谁可以帮助我?
private void jButton6MousePressed(java.awt.event.MouseEvent evt) {
pressed = true;
while(pressed) {
car.accelerator();
}
}
private void jButton6MouseReleased(java.awt.event.MouseEvent evt) {
pressed = false;
}
感谢。
答案 0 :(得分:1)
你得到一个无限循环因为你写了一个无限循环,你需要
JButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
car.accelerator();
}
});
如果你希望它在自己拥有时重复动作,那就更难了,here就是你如何做到这一点的一个例子。简而言之,您需要使用线程。
答案 1 :(得分:0)
我很确定一旦按下设置为true,你永远不会退出while循环,所以没有按下按钮的事实永远不会注册,程序会被卡住。我唯一能想到的是使用计时器定期检查JButton的状态。或者,您可以使用多线程。也就是说,让PRESSED成为由JButton设置的线程1中的字段(正如您所做的那样),并在线程2中进行循环,检查线程1中PRESSED的状态。
编辑:哎呀,我看到bmorris591已经建议多线程了。
答案 2 :(得分:0)
摆动线程进入无限循环。 你应该在另一个线程中运行你的循环:
private class BooleanHolder{
bool pressed;
};
final BooleanHolder pressed = new BooleanHolder();
private void jButton6MousePressed(java.awt.event.MouseEvent evt) {
presed.pressed=true;
Thread t = new Thread( new Runnable(){
public void run(){
while(pressed.pressed)
{
car.accelerator();
}
}
}
t.start();
}
private void jButton6MouseReleased(java.awt.event.MouseEvent evt) {
pressed.pressed=false;
}
答案 3 :(得分:0)
如果不知道car.accelerator();
做了什么,就不可能提出准确的建议。
如果car.accelerator()
以任何方式与UI交互,您需要小心,不应该从EDT以外的任何线程更新UI。
相反,您可以使用快速点火javax.swing.Timer
private Timer accelerateTimer;
//** ... **//
accelerateTimer = new Timer(15, new ActionListener() {
public void actionPerformed() {
car.accelerator();
}
});
accelerateTimer.setRepeats(true);
//** ... **//
public void mousePressed(MouseEvent me) {
accelerateTimer.restart();
}
public void mouseReleased(MouseEvent me) {
accelerateTimer.stop()
}