Я напишу сводку кода, а затем объясню.
У меня есть кнопка STARTER , которая запускает процедуру и монитор прогресса для нее
// from a button
actionPerformed()
// enable procedure control buttons pause and cancel at this point
SomeProcedure ProcTh = new SomeProcedure(aTable)
ProcTh.Start();
ProcessLog LogTh = new ProcessLog(aTable, aProgressBar)
LogTh.Start();
// inside try catch:
ProcTh.join();
LogTh.join();
Это сводка вызванного потока процедуры:
class SomeProcedure extends Thread
JTable aTable = null;
// the executable part
public void run()
for (int i=0;i<aTable.getRowCount();i++)
// process data in a row
while (Paused &&! Canceled)
wait(); // inside a try catch
if (Canceled)
i=aTable.getRowCount()-1; // maybe a break is better??
// the constructor part initializes things
public SomeProcedure (JTable T)
aTable = T;
Это сводка вызванного потока монитора:
class ProcessLog extends Thread
JTable aTable = null;
JProgressBar aBar = null;
// the executable part
public void run()
while (sofarlong<totallong)
aBar.setValue((int)(sofarlong/totallong));
// also update values in aTable
// the constructor part
public ProgressLog (JTable T, JProgressBar B)
aTable = T;
aBar = B;
У меня нет ERR компиляции, нокогда я нажимаю STARTER , он висит нажатым, а кнопки паузы и отмены не включаются.Я, вероятно, делаю что-то не так.Это лучший способ обновить элементы управления графическим интерфейсом из потоков в Java?Это лучший способ показать прогресс , достигнутый другим потоком?Я заметил, что не могу получить доступ к элементам управления графического интерфейса из run внутри потоков, поэтому я пропустил их при создании потоков.
SomeProcedure пишет на SoFarLong , в то время какэто таблица обработки rown, и ProcessLog будет только читать ее.SoFarLong - это общая переменная на уровне GUI, такая же, как SomeProcedure и ProcessLog, скажем, она называется GUI.java ---
Как всегда, любая помощь или ориентация действительно приветствуются.