Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java不被认为是eclipse的内部或外部命令,但在cmd中运行良好_Java_Eclipse - Fatal编程技术网

Java不被认为是eclipse的内部或外部命令,但在cmd中运行良好

Java不被认为是eclipse的内部或外部命令,但在cmd中运行良好,java,eclipse,Java,Eclipse,我正在运行一个在eclipse(java)下从cmd开发的软件。它工作得很好。有一次我想用它来运行它 我正在将runnble java sw(B.jar)添加到另一个java程序(a)中。B.jar的“调用”在cmd中运行良好,并且正确地完成了任务。一旦从程序(A)调用,它就会给出“unrocongnized命令”的错误。我从eclipse执行程序(A)。我们必须在Eclipse中配置一些附加信息吗?或者我可能需要直接从软件发行版执行(A) 从cmd执行的屏幕截图: 来自eclipse的电子执

我正在运行一个在eclipse(java)下从cmd开发的软件。它工作得很好。有一次我想用它来运行它

我正在将runnble java sw(B.jar)添加到另一个java程序(a)中。B.jar的“调用”在cmd中运行良好,并且正确地完成了任务。一旦从程序(A)调用,它就会给出“unrocongnized命令”的错误。我从eclipse执行程序(A)。我们必须在Eclipse中配置一些附加信息吗?或者我可能需要直接从软件发行版执行(A)

从cmd执行的屏幕截图:

来自eclipse的电子执行的屏幕截图:

2020-06-24 12:57:26172[Thread-7]信息—“爪哇岛”不是一个侦察司令部内部的地方 2020-06-24 12:57:26173[Thread-7]信息-外部环境,联合国计划,例如“可切割的外部环境”。 2020-06-24 12:57:36141[线程-6]信息-阿皮耶兹河畔的一个连续浇注机

从(A)到调用(B)的脚本:


非常感谢您的帮助

使用
Runtime.exec(String cmd,String[]envp,File dir)
重载
{”“}
对于envp,您提供的子进程没有环境变量,特别是没有路径envvar,相当于一个空的。由于批处理文件显然运行的是一个简单的程序名
java
,而不是完整的路径名,因此需要在PATH变量中查找该文件,并且由于PATH变量为空,因此查找失败。如果您不想或无法更改批处理文件以指定所有内容的完整路径(或者不依赖于任何envvars),并且如果需要,也可以类似地更改它运行的所有内容,那么最好的解决方案是对第二个(envp)传递pass
null
exec
的参数,因此它使用默认值,即父Java自己的环境变量。更难的方法是手动构造一个正确的EnvVar列表(带值),并传递该列表


另外,您可以将
字符串[]
重载与
新字符串[]{“script”,“command”}
一起使用,而不是将
“script”+“+”参数“
串联起来,因为
Runtime.exec
必须重新拆分。根据编译器的不同,您可能不需要
新字符串[]
;我没有跟踪所有类型推断的更改,因为我通常更喜欢显式的。但是,既然您希望使用该组合进行跟踪,可能就不需要了。

可能是@vmrvictor的一个副本,看起来很相似,但实际上并不是同一个问题;在我的例子中,两个程序之间的通信工作得很好(我猜),问题是在从eclipse运行后,我有一个java错误,您有哪个java错误,您可以共享stacktrace吗?请不要使用屏幕截图,而是复制粘贴文本。如何调用B?使用Runtime.exec()还是什么?发布执行的代码会很有帮助。
private final InputStream inputStream;

class Flux implements Runnable {

    private final InputStream inputStream;

    Flux(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    private BufferedReader getBufferedReader(InputStream instream) {
        return new BufferedReader(new InputStreamReader(instream));

    }

    public void run() {
        BufferedReader br = getBufferedReader(inputStream);
        String line = "";
        try {
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

String command =  B_SW_AbsolutePath + " "+ usersCommand;
try {
            Runtime rt = Runtime.getRuntime();
            this.proc = rt.exec(command, {""}, outputDir);
            Trace.info("execution "+command+" "+outputDir.toString());
            
            Flux outputStream = new Flux(
                    this.proc.getInputStream());
            Flux errorStream = new Flux(
                    this.proc.getErrorStream());
            new Thread(outputStream).start();
            new Thread(errorStream).start();
            this.proc.waitFor(10,TimeUnit.SECONDS);
        } catch (IOException e) {
            Trace.erreur("External software can not be run " + e.getMessage());
        }
        
        finally{
            
            this.process.destroy(); 
        }
    }