Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.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 使用waitFor()的程序在linux上不能像在windows上那样工作_Java_Linux_Thread Safety_Synchronized - Fatal编程技术网

Java 使用waitFor()的程序在linux上不能像在windows上那样工作

Java 使用waitFor()的程序在linux上不能像在windows上那样工作,java,linux,thread-safety,synchronized,Java,Linux,Thread Safety,Synchronized,大家好,我不知道为什么这段代码可以在windows上运行,但不能在linux上运行,所以如果有人发现这段代码有问题,或者是其他的方法有问题,我会非常感谢您的指导,谢谢您的时间 Process p = Runtime.getRuntime().exec(linuxCommand); int cont=0,retorno=p.waitFor(); try { synchronized (this) { while (retorno!=0 && conteo<

大家好,我不知道为什么这段代码可以在windows上运行,但不能在linux上运行,所以如果有人发现这段代码有问题,或者是其他的方法有问题,我会非常感谢您的指导,谢谢您的时间

Process p = Runtime.getRuntime().exec(linuxCommand);
int cont=0,retorno=p.waitFor();
try {
     synchronized (this) {
     while (retorno!=0 && conteo<10000){
         retorno=p.waitFor();
         System.out.println("cont++);
     }
    if (retorno == 0) {
        ans = true;
        logger.info("Return Value: " + ans);
    }else{
        ans = false;
        logger.info("Return Value: " + ans);
    }
 }

} catch (InterruptedException e) {
    e.printStackTrace();
}
任何帮助,非常感谢再次感谢


lol我为西班牙语retrono=return中的变量名感到抱歉,但在我翻译时,我没有停下来思考returnajajaj:=)

同时有一些事情在起作用。首先,您已经运行了多个程序——这一个和您正在生成的一个——并且该程序中的错误在这里造成了麻烦

首先,
linuxCommand

/opt/jdk/jdk1.6.0_22/bin/java -classpath
"/var/xp/client/a/h/n/clases/z1":"/var/xp/client/a/h/n/test"
MyObjectT /m:Param21 /f:"/var/xp/client/a/h/n/IOFile/1_Input.txt"
/o:"/var/xp/client/a/h/n/IOFile/1_Output.txt"
我已经用线把它包好了。根据您在程序中定义此字符串的方式,您可能需要转义此字符串中的所有
标记。(如果您只是使用
System.out.println()
打印此字符串,它看起来像什么?)

可能更好的方法是使用,一种接受字符串数组而不是单个字符串的方法。这样,您可以根据程序需要中断参数,而不必担心正确的shell引用。它看起来像这样(未测试的)块:


您确实说过您已在shell中手动运行此命令以确认其工作,但那些
/i
/o
等在类似Unix的平台上感觉非常尴尬。您确信格式在Linux上可以按预期工作吗?

您的源代码中有问题。您已编写
return=p.waitFor()
这可能与此有关:您的错误与您的类路径有关。MyObject位于何处,它的包层次结构是什么?感谢您的时间是的,我知道“return”,但我最初在西班牙语returno中有它,在工作一天之后…@DJ感谢您的考虑,事实上我将linuxCommand变量替换为“更新文件数据库“成功了。进程等待了至少15秒,然后返回ans=0,所以是的,这与类路径有关,但是什么,另一件有趣的事情是,如果您将解析设置部分更改为windows,那么类路径分隔符将保持不变:就像在Linux中一样,它将发出与上面相同的stackTrace错误example@sarnold我修改了变量名以反映原始代码DJ所说的关于类路径问题的任何提示。非常感谢你的答案是肯定的,我必须删除它们中的每一个,然后重新运行命令一切正常显然Linux不喜欢我在周五修正的引号,我在考虑费率问题。。。不管怎样,这就是答案Linux with exec(无引号命令..)=0)再次感谢SARNOLD
/opt/jdk/jdk1.6.0_22/bin/java -classpath
"/var/xp/client/a/h/n/clases/z1":"/var/xp/client/a/h/n/test"
MyObjectT /m:Param21 /f:"/var/xp/client/a/h/n/IOFile/1_Input.txt"
/o:"/var/xp/client/a/h/n/IOFile/1_Output.txt"
String linuxCommand[] = {"/opt/jdk/jdk1.6.0_22/bin/java",
                         "-classpath",
                         "/var/xp/client/a/h/n/clases/z1:/var/xp/client/a/h/n/test",
                         "MyObjectT",
                         "/m:Param21",
                         "/f:/var/xp/client/a/h/n/IOFile/1_Input.txt",
                         "/o:/var/xp/client/a/h/n/IOFile/1_Output.txt"};
Process p = Runtime.getRuntime().exec(linuxCommand);