我编写了一个程序,它使用一个按钮来触发一个循环,但是我希望在循环执行完之前释放按钮,以便在必要时重新触发它。
这是听众:
// Play note
btnPlay.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
strum();
}
});
这是它正在执行的代码:
public void strum() {
int f = (Integer)frequency.getValue();
double l = loss.getValue() / 1000.0;
GuitarString note = new GuitarString(f, l);
RealTimeAudio playback = new RealTimeAudio();
int playTime = playback.getSampleRate(); // arbitrarily set to 1 second
note.pluck();
while (note.time() < playTime) {
playback.play(note.sample());
note.tic();
}
}
任何建议都将不胜感激。
答案 0 :(得分:0)
你需要在另一个线程中运行你的strum()方法来获得你想要的东西。 有很多方法可以做到这一点。 一个是摇摆工人:
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
strum();
return null;
}
@Override
protected void done() {
//do something to clean up or so
}
}.execute();
另一个是使用线程:
new Thread() {
@Override public void run() {
try {
strum();
} catch ( InterruptedException e ) { e.printStackTrace(); }
}
}.start();