java - 当我通过 java 应用程序中的进程运行 pg_restore 时,应用程序卡住

标签 java swing postgresql

当我通过 java 应用程序中的进程运行 pg_restore 时,应用程序卡住和信息消息不显示,但进程已成功完成。为什么会这样?我使用 PostgreSQL 9.2。

方法代码:

private void restoreDB() {

    JFileChooser fileopen = new JFileChooser();   
    FileNameExtensionFilter filter = new FileNameExtensionFilter("DB FILES", "sql");
    fileopen.addChoosableFileFilter(filter);
    fileopen.setCurrentDirectory(new java.io.File("C:/backups/"));
    fileopen.setDialogTitle("Выберите папку для резервной копии");
    fileopen.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    fileopen.setAcceptAllFileFilterUsed(false);   
    int ret = fileopen.showDialog(null, "Restore DB");                
    if (ret == JFileChooser.APPROVE_OPTION) {
        File file = fileopen.getSelectedFile();
        try {
            String path = file.getAbsolutePath();
            System.out.println(path);
            String user = "postgres";
            String dbName = "Auto";
            String executeCmd = "pg_restore -i -U " + user + " -d " + dbName+" -v "+ path;
            Process runtimeProcess;
            runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();

            if (processComplete == 0) {
                javax.swing.JOptionPane.showMessageDialog(null, "Successfull!");
                log.info("Successfull!");
            } else {
                javax.swing.JOptionPane.showMessageDialog(null, "Unsuccessfully");
                log.info("Unsuccessfully");
            }
    }catch (Exception ex) {
        ex.printStackTrace();
    }
}

}

最佳答案

不要阻塞 EDT(事件调度线程)——当发生这种情况时,GUI 将“卡住”。不是调用 Thread.sleep(n) 而是实现一个 Swing Timer 用于重复任务或一个 SwingWorker 用于长时间运行的任务。参见 Concurrency in Swing了解更多详情。

关于java - 当我通过 java 应用程序中的进程运行 pg_restore 时,应用程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20749614/

相关文章:

Java - 外观和感觉问题

c# - 将 IN 谓词与字符串数组一起使用时,PostgreSQL 缺少运算符

ruby-on-rails - Group by 和 order by 在 Rails 中有很多直通模型

java - 方法完成后 PostgreSQL 关闭连接

java - 在 BoxLayout 中将按钮居中对齐

java - 如何在 netbeans 8.2 中使用 JComboBox 下拉列表创建更新按钮?

java - 将数据输入到输入流中

java - Jersey JUnit 测试框架 - 错误状态 500

java - 在java中的浏览器中打开超链接?

java:只有一个接口(interface)时如何制作防御性副本