Привет, у меня возникла следующая проблема... У меня основной jframe начался так:
public static void main (String args[]){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Form3 myF=new Form3();
}
});
};
в jframe у меня есть Jpanels. На jpanel я хочу начать второй поток. Я пробовал это так:
try {
while (DBAccess.haveResult("ASS"+harnessId)==null&&cancelCycle == 0) {
thread1.sleep(3*1000);
System.out.println("+++++++++");
System.out.println(DBAccess.haveResult("ASS"+harnessId));
res = DBAccess.haveResult("ASS"+harnessId);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
но я не могу остановить этот поток и даже не могу его отменить, потому что главное окно перестает реагировать
чтобы прояснить мою проблему: у меня есть кнопка «Тест» на JPanel, которая запускает процесс тестирования. Процесс тестирования состоит из цикла, который повторяется каждые 3 секунды, этот цикл проверяет состояние базы данных. Проблема в том, что я не могу остановить этот цикл, пока статус не появится в БД (условие пока), потому что окно занято после того, как я нажму «тест». Даже реализация runnable и помещение тестового метода в run() не сработали.
Исходный код тестовой кнопки:
if (e.getActionCommand().equals("Test")){
run();}
метод запуска:
@Override
public final void run() {
test();
}
Метод испытания:
Map result_row = DBAccess.addRow("ASS"+harnessId,htOperList.get(seqNumber-1).getNametestprogram(),"",null);
if(result_row.containsKey("ADDROW")){System.out.println("Record inserted" );}
Database db = null;
Map res = null;
try {
while (DBAccess.haveResult("ASS"+harnessId)==null&&cancelCycle == 0) {
thread1.sleep(3*1000);
System.out.println(DBAccess.haveResult("ASS"+harnessId));
res = DBAccess.haveResult("ASS"+harnessId);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
run()
Runnable. Это просто вызывает метод в текущем потоке. Прочтите руководство по параллелизму. - person JB Nizet   schedule 20.08.2013SwingWorker
намного лучше, поскольку программисту не нужно беспокоиться об обновлениях, связанных с графическим интерфейсом, поскольку они автоматически выполняются наEDT
:-) - person nIcE cOw   schedule 20.08.2013