Java 更新jprogress条

Java 更新jprogress条,java,swing,jframe,event-dispatch-thread,jprogressbar,Java,Swing,Jframe,Event Dispatch Thread,Jprogressbar,我正在jframe中运行音频输入流。我在jframe上有一个进度条。我把JProggersBar命名为“bar”。我试图让进度条跟踪音频输入流通过歌曲的距离。我尝试了一个循环,但每次我尝试它,循环最终使jframe冻结。然后我就不能做其他的事情,比如关闭窗口或者暂停音频输入流,直到歌曲结束。有人能帮我吗?您需要以某种方式更新EDT中的进度条,并在EDT之外继续处理流。一种方法是使用一个。您可以在doInBackground()中进行处理,并使用publish()更新进度。或者,您可以滚动自己的线

我正在jframe中运行音频输入流。我在jframe上有一个进度条。我把JProggersBar命名为“bar”。我试图让进度条跟踪音频输入流通过歌曲的距离。我尝试了一个循环,但每次我尝试它,循环最终使jframe冻结。然后我就不能做其他的事情,比如关闭窗口或者暂停音频输入流,直到歌曲结束。有人能帮我吗?

您需要以某种方式更新EDT中的进度条,并在EDT之外继续处理流。一种方法是使用一个。您可以在
doInBackground()
中进行处理,并使用
publish()
更新进度。或者,您可以滚动自己的线程,并在需要更新进度条时使用
SwingUtilities.invokeLater()

以某种方式,您需要更新EDT中的进度条,并在EDT之外继续处理流。一种方法是使用一个。您可以在
doInBackground()
中进行处理,并使用
publish()
更新进度。或者,您可以滚动自己的线程,并在需要更新进度条时使用
SwingUtilities.invokeLater()

我发现循环必须在与JFrame不同的线程中实现。如:

public class Window extends JFrame{
       public int getMusicPosition(){
                  //get the music positional value and return it
       }

       public Window(){
                  new Thread(new BarUpdater()).start();
       }

       public class BarUpdater implements Runnable{
                  public void run(){
                             while(true){
                                        bar.setValue(getMusicPosition());
                             }
                  }
       }
}

我发现循环必须在与JFrame不同的线程中实现。如:

public class Window extends JFrame{
       public int getMusicPosition(){
                  //get the music positional value and return it
       }

       public Window(){
                  new Thread(new BarUpdater()).start();
       }

       public class BarUpdater implements Runnable{
                  public void run(){
                             while(true){
                                        bar.setValue(getMusicPosition());
                             }
                  }
       }
}