在完成执行操作之前释放actionlistener

时间:2014-08-24 13:30:11

标签: java actionlistener

我编写了一个程序,它使用一个按钮来触发一个循环,但是我希望在循环执行完之前释放按钮,以便在必要时重新触发它。

这是听众:

    // 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();
    }
}

任何建议都将不胜感激。

1 个答案:

答案 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();