2

我正在写一个音乐播放器。当我从外部音乐文件中读取数据时,我会用幅度信息填充缓冲区。因为我认为将这个阻塞操作生成到它自己的线程中是有意义的,所以我添加了一个在 runnable 中运行它的接口:

public class AudioInterface implements Runnable {

 public void run() 
 {
    AudioManager am = new AudioManager();
    am.play("res/sample2.mp3");
 }
}

以下是我的以下问题:

  • 如何从另一个类创建一个钩子来轮询幅度数据?我需要它来编写将绘制到 JPanel 画布上的算法。
  • 启用可视化的面板是否也应该在不同的线程中?
  • 目前 run() 仅包括播放文件,我将如何将此线程用于其他操作,例如摆姿势和寻找等,因为只有一个运行操作。

谢谢

4

1 回答 1

3

一些想法:

如何从另一个类创建一个钩子来轮询幅度数据?我需要它来编写将绘制到 JPanel 画布上的算法。

由于这是一个 Swing 程序,请考虑为您的后台线程使用 SwingWorker,然后通过 SwingWorker 的发布/处理方法对将幅度数据泵入程序的 GUI 部分。

启用可视化的面板是否也应该在不同的线程中?

在这里小心。所有 Swing 代码都应该在一个线程上调用,并且只能在一个线程上调用,即事件调度线程。请看一下这方面的教程,Swing 中的并发

目前 run() 仅包括播放文件,我将如何将此线程用于其他操作,例如摆姿势和寻找等。

您不为此使用“线程”,而是调用对象的方法。

此外,您可能希望将 AudioManager 变量声明为类字段,而不是局部变量,否则它的范围仅限于声明它的方法,从而阻止其他代码与其交互。

于 2012-10-21T00:44:15.543 回答