首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Java中用Runtime对象打开多个文件?

如何在Java中用Runtime对象打开多个文件?
EN

Stack Overflow用户
提问于 2012-11-01 03:41:51
回答 1查看 935关注 0票数 0

我使用Runtime.getRuntime().exec(String cmd)函数打开office文件(docx、xlsx)。同时,我将这些文件的元数据存储在数据库中。为了保持完整性,我在元数据中使用一个标志锁定文件,这样其他用户就不能同时修改该文件。这意味着在用户关闭文件(例如,关闭外部进程)后,必须自动重置该标志。

以下是打开该文件的代码片段:

代码语言:javascript
运行
复制
File file = new File("c:/test.docx");
Process process = null;
if(file.getName().endsWith("docx")) {
    process = Runtime.getRuntime().exec("c:/msoffice/WINWORD.EXE "+file.getAbsolutePath());
} else if(file.getName().endsWith("xlsx")) {
    process = Runtime.getRuntime().exec("c:/msoffice/EXCEL.EXE "+file.getAbsolutePath());
}
if(process!=null) {
    new ProcessExitListener(file, process);
}

下面是我的监听器,它会一直等到用户关闭文件(最后通过在元数据中设置标志来解锁文件):

代码语言:javascript
运行
复制
private class ProcessExitListener extends Thread {

    private File file;
    private Process process;

    public ProcessExitListener(File file, Process process) throws IOException {
        this.setName("File-Thread ["+process.toString()+"]");
        this.file = file;
        this.process = process;
        this.start();
    }

    @Override
    public void run() {
        try {
            process.waitFor();
            database.unlock(file);
        } catch (InterruptedException ex) {
            // print exception
        }
    }
}

这适用于不同的文件类型,例如,如果我同时打开1个docx和1个xlsx文件。但当打开两个docx文件时,其中一个进程在初始化后立即退出。

你知道为什么吗?

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-01 03:45:44

,但当打开2个docx文件时,其中一个进程在初始化后立即存在。

可能是因为winword.exe进程发现它已经有一个实例在运行,所以它不是在内存中保留两个实例,而是只要求第一个实例打开第二个文档。我不知道从GUI的角度看它是什么样子,但是看看任务管理器,试着从Windows资源管理器打开两个Word文档。第二个文件不会导致启动第二个winword.exe进程。

我可以在Ubuntu Linux上重现完全相同的行为。当我跑的时候:

代码语言:javascript
运行
复制
$ geany foo.txt

而且geany编辑器还没有运行,控制台会挂起,直到我关闭编辑器。但如果我打开另一个终端并调用:

代码语言:javascript
运行
复制
$ geany bar.txt

这会立即返回,并且bar.txt只是作为现有进程中的另一个选项卡打开。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13166314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档