2016-05-26 8 views
6

"/home/simulations/scripts/getDsuIp.sh"コマンドを引数なしで実行しようとしています。Java: "exec"または "ProcessBuilder"を使用してコマンドを実行すると "UNIXProcess"エラーが発生する

マシンでこのコマンドを手動で実行すると、効果的です。だからファイルは間違いなくであり、間違いなく実行可能(755)であり、同じユーザ(ルート)の下にの下にあります。このファイルを実行するJavaプログラムを実行しようとすると、問題が発生します。 私はこの問題を1台のマシンでしか見ることができません。、他の場所でも動作しますが、なぜ失敗しているのかを知りたいのですが。

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.UnsatisfiedLinkError: java.lang.UNIXProcess.init()V 
    at java.lang.UNIXProcess.init(Native Method) 
    at java.lang.UNIXProcess.<clinit>(UNIXProcess.java:295) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:130) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) 
    at mycompany.PCtrlDsu.getDsuIP(PCtrlDsu.java:136) 
    at mycompany.PCtrlDsu.main(PCtrlDsu.java:41) 

私も同じエラーが生じ、同様にそれを実行する他の方法を試してみました:

をこれは私に次のエラーを与えたProcessBuilder
ProcessBuilder pb = new ProcessBuilder("/home/simulations/scripts/getDsuIp.sh"); 
Process p = pb.start(); 

を使用してプロセスを実行

execを使用してプロセスを実行する

ここでは、私はexecを使って実行しようとしました:

String[] cmd = {"/home/simulations/scripts/getDsuIp.sh"}; 
Process p = Runtime.getRuntime().exec(cmd); 
InputStream in = p.getInputStream(); 
BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
String result = br.readLine(); 
p.waitFor(); 
System.out.println ("exit: " + p.exitValue()); 
p.destroy(); 

"exec"機能を実行しようとすると2行目で失敗します。

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.UnsatisfiedLinkError: java.lang.UNIXProcess.init()V 
    at java.lang.UNIXProcess.init(Native Method) 
    at java.lang.UNIXProcess.<clinit>(UNIXProcess.java:295) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:130) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) 
    at java.lang.Runtime.exec(Runtime.java:617) 
    at java.lang.Runtime.exec(Runtime.java:450) 
    at java.lang.Runtime.exec(Runtime.java:347) 
    at mycompany.PCtrlDsu.getDsuIP(PCtrlDsu.java:110) 
    at mycompany.PCtrlDsu.main(PCtrlDsu.java:55) 

私は、このソリューションを実装しようとしたプロセスビルダー

と#2を試してみてください: Running Shell Script From External Directory: No such file or directory

 String script = "getDsuIp.sh"; 
     try { 
      Process awk = new ProcessBuilder("/bin/bash", "/home/simulations/scripts/" + script).start(); 
      awk.waitFor(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

しかし、私は同じエラーを取得:

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.UnsatisfiedLinkError: java.lang.UNIXProcess.init()V 
    at java.lang.UNIXProcess.init(Native Method) 
    at java.lang.UNIXProcess.<clinit>(UNIXProcess.java:295) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:130) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) 
    at mycompany.PCtrlDsu.getDsuIP(PCtrlDsu.java:143) 
    at mycompany.PCtrlDsu.main(PCtrlDsu.java:41) 

誰もが知っています何が "java.lang.UnsatisfiedLin kError:java.lang.UNIXProcess "エラーの意味ですか?

Javaバージョン:

java version "1.7.0_79" 
OpenJDK Runtime Environment (fedora-2.5.5.0.fc20-x86_64 u79-b14) 
OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode) 

答えて

2

エラーメッセージは、Javaを呼び出すためのネイティブメソッドを見つけることができないことを意味します。

呼び出すネイティブメソッドがJREの一部であることを考えると、影響を受ける1台のマシンのJavaインストールが何らかの形で汚れていることを示唆しているだけです。

エラーメッセージが表示されたら、そのボックスからJavaを完全にアンインストールして再インストールしたいと思います。しかし、それがあなたのための選択肢かどうかは分かりません。

+0

ああ、ok!それは意味があります、ありがとうございます – Kayvar

+0

うん、それは働いた! – Kayvar

関連する問題