Java 监视线程状态的规范方法
我正在使用Scala在Swing中编写一个GUI应用程序,它启动多个线程,通过HTTP并发下载文件。我想使用一些Java 监视线程状态的规范方法,java,swing,scala,concurrency,progress-bar,Java,Swing,Scala,Concurrency,Progress Bar,我正在使用Scala在Swing中编写一个GUI应用程序,它启动多个线程,通过HTTP并发下载文件。我想使用一些JProgressBars来显示下载的状态。显然,进度条必须从事件调度线程更新,此外,我希望将HTTP下载代码与GUI分开 我想知道最好的方法是什么SwingWorker是Swing特定的,Observable似乎有些过时,因为传递给观察者的参数是一个对象,必须强制转换。Scala是一种功能强大的现代语言,所以我希望有一种更简单的方法来完成我想要的任务。让下载的类接受一个Propert
JProgressBar
s来显示下载的状态。显然,进度条必须从事件调度线程更新,此外,我希望将HTTP下载代码与GUI分开
我想知道最好的方法是什么
SwingWorker
是Swing特定的,Observable
似乎有些过时,因为传递给观察者的参数是一个对象,必须强制转换。Scala是一种功能强大的现代语言,所以我希望有一种更简单的方法来完成我想要的任务。让下载的类接受一个PropertChangeListener,并通知下载进度。监听器会相应地更新进度条。通过使用Scala闭包实现自己的监听器回调系统,我实现了自己想要的功能。下载类中包含以下代码:
val listeners = new ListBuffer[Int => Unit]
def registerListener(f: Int => Unit) {
if (!listeners.contains(f)) {
listeners.append(f)
}
}
这在GUI中的嵌套SwingWorker中进行:
downloader.registerListener(this.listener)
def listener(progress: Int) {
SwingUtilities.invokeLater(new Runnable {
def run() {
progressBar.setValue(progress)
table.repaint()
}
})
}
可能重复,并且addPropertyChangeListener是java.awt.Component的成员,我正在寻找一种不使用GUI库的方法来实现这一点。