我正在构建一个 Swing 应用程序,其中一部分功能应该是处理和输出一些视觉和听觉的文本(使用 Mary TTS)。我需要一些关于 GUI 和文本处理类进行通信的最佳方式的建议。
GUI 类是 JPanel 的子类。其中我有一个实现 Runnable 的类,称为 LineProcesser,它准备发送到音频播放器的文本。我正在使用一个线程执行器来阻止这个 EDT(这可能不是最好的方法,但它似乎达到了我想要的结果)。
我的意图是让 LineProcessor 遍历所有文本并在每行的末尾更新一个 JTextArea。此外,它需要在某些点停止并等待用户输入。用户输入完成后,GUI 类应该告诉它继续处理。
以下代码说明了我目前拥有的内容:
public class MyPanel extends JPanel {
ExecutorService lineExecutor = Executors.newSingleThreadExecutor();
Runnable lineProcessor = new LineProcessor();
public class LineProcessor implements Runnable {
private int currentLineNo = 0;
public LineProcessor() {
// ...
}
@Override
public void run() {
// call getText();
// call playAudio();
currentLineNo++;
}
}
}
private JButton statusLbl = new JLabel();
private JButton mainControlBtn = new JButton();
private void mainControlBtnActionPerformed(ActionEvent evt) {
if (mainControlBtn.getText().equals("Start")) {
lineExecutor.submit(lineProcessor);
mainControlBtn.setText("Running");
}
}
}
LineProcessor 如何通知 GUI 组件它们需要更改以及如何从 GUI 中暂停和重新启动它?我对是否需要 Swing Worker、属性/事件侦听器或其他东西感到困惑?我读过的例子有点道理,但我看不出如何将它们应用到我这里的代码中。