2014-09-03 2 views
1

Я делаю программу мониторинга посещаемости. Часть программы будет считываться из файла excel. Этот файл excel содержит много листов, и каждый лист содержит расписание профессора.Пауза от чтения excel и резюме нажатием кнопки

Вот как эта часть должна работать. Он будет проходить через листы файла excel. Затем он будет проверять сначала, если профессор, который владеет расписанием, уже находится в базе данных. Если да, расписание будет добавлено в базу данных. Если нет, то качающаяся jframe покажет, чтобы добавить этого профессора в базу данных.

Что я хочу знать, когда появляется jframe, как я могу приостановить чтение файла excel и возобновить его после нажатия кнопки OK в jframe? Я попытался использовать wait(), но jframe зависает.

Заранее спасибо

+0

Используйте прослушиватели и обработчики для этого ... Вы не можете использовать wait, поскольку он приостанавливает родительский поток, который заставит ваше приложение не отвечать. – StackFlowed

+0

Что вы используете для чтения файла excel? – Vlad

+0

Как вы показываете новый кадр? – talex

ответ

0

Вы хотите использовать модальный диалог

public void foo() { JDialog jd = new JDialog(null); jd.setModal(true); ... jd.pack(); jd.show(); System.out.println("Shows after the dialog is closed"); }

0

Чтение файла Excel, вероятно, происходит в отдельном потоке. Следовательно, вы можете управлять потоком потока и прерывать его с помощью блокировки. Например.

new Runnable() { 

    public void run() { 
    for (Sheet sheet: sheets) { 
     String professorName = readProfessorNameFromSheet(sheet); 
     Optional<Professor> professor = professorService.getProfessorByName(
     if (!professor.exists()) { 
     final Lock lock = new ReentrantLock(); 
     final Condition condition = lock.newCondition() 

     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
      NewProfessorDailog dialog = new NewProfessorDialog(); // this can implement JDialog and with modality hardcoded to true 
      dialog.addWindowListener(new WindowAdapter() { 
       public void windowClosed(WindowEvent e) { 
       condition.signal(); 
       } 
      }); 
      dialog.setVisible(true); 
      } 
     }); 

     lock.condition.await(); 
     } 
    } 
    } 

} 

(Код не является полным, это просто иллюстрирует подход).

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