相关疑难解决方法(0)

如何从Java程序启动完全独立的进程?

我正在开发一个用Java编写的程序,对于某些操作,它使用用户配置的命令行启动外部程序.目前它使用Runtime.exec()并且不保留Process引用(启动的程序是文本编辑器或存档实用程序,因此不需要系统输入/输出/错误流).

但是这有一个小问题,因为当Java程序退出时,在退出所有启动的程序之前它并没有真正退出.

如果启动的程序完全独立于启动它们的JVM,我会更喜欢它.

目标操作系统是多个,Windows,Linux和Mac是最小的,但任何带有JVM的GUI系统都是最理想的(因此实际命令行的用户可配置性).

有谁知道如何让启动的程序完全独立于JVM执行?


编辑以回复评论

启动代码如下.代码可以启动位于特定行和列的编辑器,也可以启动存档查看器.配置的命令行中的引用值被视为ECMA-262编码,并被解码并且引号被剥离以形成所需的exec参数.

这次发射发生在美国东部时间.

static Throwable launch(String cmd, File fil, int lin, int col) throws Throwable {
    String frs[][]={
        { "$FILE$"  ,fil.getAbsolutePath().replace('\\','/') },
        { "$LINE$"  ,(lin>0 ? Integer.toString(lin) : "") },
        { "$COLUMN$",(col>0 ? Integer.toString(col) : "") },
        };
    String[] arr; // array of parsed tokens (exec(cmd) does not handle quoted values)

    cmd=TextUtil.replace(cmd,frs,true,"$$","$");
    arr=(String[])ArrayUtil.removeNulls(TextUtil.stringComponents(cmd,' ',-1,true,true,true));
    for(int xa=0; xa<arr.length; xa++) {
        if(TextUtil.isQuoted(arr[xa],true)) {
            arr[xa]=TextDecode.ecma262(TextUtil.stripQuotes(arr[xa]));
            }
        }
    log.println("Launching: "+cmd);
    Runtime.getRuntime().exec(arr);
    return null; …
Run Code Online (Sandbox Code Playgroud)

java external-process exec

50
推荐指数
3
解决办法
8万
查看次数

标签 统计

exec ×1

external-process ×1

java ×1