java中的新线程需要建议

java中的新线程需要建议,java,swing,concurrency,Java,Swing,Concurrency,我正在写一个音乐播放器。当我从外部音乐文件读取数据时,我用振幅信息填充缓冲区。因为我认为将此阻塞操作生成到它自己的线程是有意义的,所以我添加了一个在runnable中运行它的接口: public class AudioInterface implements Runnable { public void run() { AudioManager am = new AudioManager(); am.play("res/sample2.mp3"); } } 以下是我的

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

public class AudioInterface implements Runnable {

 public void run() 
 {
    AudioManager am = new AudioManager();
    am.play("res/sample2.mp3");
 }
}
以下是我的问题:

  • 如何从另一个类创建钩子来轮询振幅数据?我需要它来编写一个算法,它将被绘制到JPanel画布上
  • 启用可视化的面板是否也应位于不同的线程中
  • 当前run()仅包括播放文件,由于只有一个run操作,我如何将此线程用于其他操作,如摆姿势和搜索等
谢谢

一些想法:

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

由于这是一个Swing程序,请考虑使用Swing WorksFor后台线程,然后通过Swing Works/PrimePosial/PosialPosivIn对该程序的GUI部分泵送幅度数据。

启用可视化的面板是否也应位于不同的线程中

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

当前run()仅包括播放文件,我如何使用此线程进行其他操作,如摆姿势和搜索等

你不使用“线程”,而是调用对象的方法


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

我理解,谢谢。关于你提到的最后一点,我知道AudioManager应该是一个类变量,所以你认为我应该在这个接口中创建方法,当对象的执行停留在线程中时,这些方法将影响对象的行为?@Pat:是的,我认为你没有选择权。如果多个对象试图同时影响AudioManager对象的状态,那么这些方法可能必须同步。