2011-01-04 13 views
0

Wenn ich versuche, ein Glas aus der Befehlszeile auszuführen, funktioniert es gut. Ich versuche, das gleiche Glas in einem anderen Java-Programm auszuführen, etwa so:Ausführen eines Jar von ProcessBuilder gibt ClassNotFoundException

ProcessBuilder pb = new ProcessBuilder("java", "-Xmx1024m -Xms1024m -DTOOLS_DIR="/home/IM/work/dist" -Daoi=whole -jar "/home/IM/work/dist/idt_tools.jar"); 
pb.start() 

Doch dies mir eine ClassNotFoundException schenkt

ERR>Exception in thread "main" java.lang.NoClassDefFoundError: -Xmx1024m -Xms1024m -DTOOLS_DIR="/home/IM/work/dist" -Daoi=whole -jar "/home/IM/work/dist/idt_tools/jar" 
ERR>Caused by: java.lang.ClassNotFoundException: -Xmx1024m -Xms1024m -DTOOLS_DIR=".home.IM.work.dist" -Daoi=whole -jar ".home.IM.work.dist.idt_tools.jar" 
ERR> at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
ERR> at java.security.AccessController.doPrivileged(Native Method) 
ERR> at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
ERR> at java.lang.ClassLoader.loadClass(ClassLoader.java:307) 
ERR> at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
ERR> at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
ERR>Could not find the main class: -Xmx1024m -Xms1024m -DTOOLS_DIR="/home/IM/work/dist" -Daoi=whole -jar "/home/IM/work/dist/idt_tools.jar". Program will exit. 

Warum es nicht glauben, dass eine Klasse? Können Sie Ihre Argumente nicht in einer langen Zeichenfolge angeben?

Antwort

6

Sinn für mich.

Vielleicht hatten Sie nicht vor, eine Klasse namens "-Xmx1024m -Xms1024m -DTOOLS_DIR ="/home/IM/Arbeit/dist "-Daoi = ganze -jar"/home/IM/Arbeit/dist/IDT_Tools .jar“vielleicht gemeint Sie diejenigen separate Argumente sein?

versuchen

ProcessBuilder pb = new ProcessBuilder("java", "-Xmx1024m", "-Xms1024m", 
    "-DTOOLS_DIR=/home/IM/work/dist", "-Daoi=whole", 
    "-jar", "/home/IM/work/dist/idt_tools.jar"); 
+0

ich bin nicht sicher, ob dies der gleiche ist oder nicht, aber ich habe eigentlich mein ganzes Kommando, teilen Sie es mit‚‘, wie die Delimiter, und versuchte es zu starten - jetzt bekomme ich, dass es "nicht auf JAR-Datei zugreifen kann" – Derek

+0

Es sollte "Jrfile {jarfile} nicht zugreifen können" können Sie überprüfen, ob diese JAR-Datei von dem Benutzer zugänglich ist, der versucht, den Prozess auszuführen? zB wenn der Benutzer o Wenn der Prozess nicht IM ist, kann dieser Benutzer nicht auf/home/IM/ –

+0

@Peter Lawrey zugreifen - so scheint es, dass Sie versuchen, eine .class auszuführen, die in einer .jar-Datei enthalten ist, die einen Main enthält Methode, ABER das .class ist nicht im Manifest als Hauptmethode registriert, dass die .class effektiv nicht ausführbar ist, ohne das .jar zu extrahieren ??? – djangofan

Verwandte Themen