2012-05-05 3 views
2

Я использую Scala для написания приложения GUI в Swing, которое запускает несколько потоков для одновременного скачивания файлов по протоколу HTTP. Я хотел бы использовать число JProgressBar s для отображения статуса загрузки. Очевидно, что индикаторы выполнения должны обновляться из потока диспетчеризации событий, и, кроме того, я хотел бы сохранить код загрузки HTTP отдельно от графического интерфейса.Канонический способ отслеживания состояния потока

Мне интересно, какой лучший способ сделать это? SwingWorker имеет значение Swing, а Observable кажется несколько архаичным в том, что параметр, переданный наблюдателю, является объектом и должен быть отброшен. Scala - мощный современный язык, поэтому я надеялся, что есть более простой способ сделать то, что я хочу.

+1

возможно дубликат [соединить JProgressBar с загрузки процесса в Java] (HTTP: // stackoverflow.com/questions/9420778/connect-jprogressbar-with-download-process-in-java) и [Java ProgressMonitorInputStream с использованием существующего JProgressBar] (http://stackoverflow.com/questions/8379398/java-progressmonitorinputstream-using- existing-jprogressbar) – jtahlborn

ответ

0

Я добился того, чего хотел, внедряя собственную систему обратного вызова слушателя с использованием закрытий Scala. Следующий код идет в Download класса:

val listeners = new ListBuffer[Int => Unit] 

def registerListener(f: Int => Unit) { 
    if (!listeners.contains(f)) { 
    listeners.append(f) 
    } 
} 

и это идет во вложенном SwingWorker в GUI:

downloader.registerListener(this.listener) 

def listener(progress: Int) { 
    SwingUtilities.invokeLater(new Runnable { 
    def run() { 
     progressBar.setValue(progress) 
     table.repaint() 
    } 
    }) 
} 
2

Пусть ваш класс, который загружает, принимает свойство PropertChangeListener, которое вы уведомляете о ходе загрузки. Слушатель соответственно обновляет индикатор выполнения.

+0

addPropertyChangeListener является членом java.awt.Component, и я ищу способ сделать это, который не использует библиотеки GUI. –

Смежные вопросы