こんにちは、誰もがこのコードが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();
}
目的:*1_Input.txt*に含まれる情報から*1_Output.txt*を作成します。
MyObjectTは/var/ xp / client / a / h / n / testにあり
ますMyObjectTは/var/xp/client/a/h/n/clases/z1のいくつかのクラスを呼び出し、最終的に1_Output.txtのコンテンツを読み取ります。ans(true / false)を返すことができます
問題
- Windowsの場合:高速化するときのフローは、1_Output.txtファイルが作成されるのを待たなかったため、現在のコードが解決された状態で、読み取るものがありませんでした。(p.waitFor()は最終的に0を返し、誰もが満足しています)
- Linux:p.waitFor()が0を返すことはなく、フローは終了し、何も返されません
linuxCommandは、Linuxで実行されるJavaコマンドを表す解析された文字列です。
このコマンドをコマンドシェルにそのまま貼り付けると、警告やエラーなしで正常に実行されることに注意してください。「ここで重要な役割を果たす とは思いません 。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 "
だから私を混乱させるのは、getErrorStream()を使用していくつかのエラーを追跡すると、これが得られるということです
Exception in thread "main" java.lang.NoClassDefFoundError: MyObjectT
Caused by: java.lang.ClassNotFoundException: MyObjectT
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: MyObjectT. Program will exit.
助けてくれて、ありがとうございました
笑スペイン語のretorno=returnの変数名については申し訳ありませんが、翻訳した時点で私は立ち止まらず、return ajajjaajajajaj:=)について考えました。