通过阅读excel暂停,然后通过按钮单击恢复

时间:2014-09-03 14:11:57

标签: java excel swing

我正在制作出勤监控计划。程序的一部分将从excel文件中读取。该excel文件包含许多工作表,每个工作表包含教授的时间表。

这就是该部分的运行方式。它将遍历excel文件的工作表。然后它将首先检查拥有该计划的教授是否已经在数据库中。如果是,则将计划添加到数据库中。如果没有,则会显示swing jframe以在数据库中添加该教授。

我想知道的是,当jframe显示时,如何在点击jframe中的OK按钮后暂停读取excel文件并恢复它?我尝试使用wait(),但jframe冻结。

提前致谢

2 个答案:

答案 0 :(得分: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"); }

答案 1 :(得分:0)

读取excel文件可能发生在一个单独的线程中。因此,您可以使用锁来控制和中断线程的流。 E.g。

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();
      }
    }
  }

}

(代码不完整,它只是说明了方法)。