我正在尝试通过另一个java程序运行java文件。这是我的代码:
private static void printLines(String name, InputStream ins) throws Exception {
String line = null;
BufferedReader in = new BufferedReader(
new InputStreamReader(ins));
while ((line = in.readLine()) != null) {
System.out.println(name + " " + line);
}
}
private static void runProcess(String command) throws Exception {
Process pro = Runtime.getRuntime().exec(command);
printLines(command + " stdout:", pro.getInputStream());
printLines(command + " stderr:", pro.getErrorStream());
pro.waitFor();
System.out.println(command + " exitValue() " + pro.exitValue());
}
public static void main(String[] args) {
String[] credentials=new String[4];int k=0;
for (String s: args) {
System.out.println(s);
credentials[k]=s;k++;
if(k==4)
break;
}
try {
//runProcess("javac test2.java");
runProcess("java test2 "+credentials[0]+" "+credentials[1]+" "+credentials[2]+" "+credentials[3]+" ");
} catch (Exception e) {
e.printStackTrace();
}System.out.println("hI");
}
问题是我保存了两个文件(我执行的文件和由该文件执行的文件)在同一个文件夹中,但是当我运行此文件时,它显示class not found错误..对于test2.java,它可能由于它在其他文件夹中搜索类文件test2.class这一事实。我该怎么办?
我的文件结构:
X / Y / Laj.java
X / Y / test2.java
它将类文件存放在x文件夹中?
答案 0 :(得分:0)
使用
Runtime.getRuntime().exec(command, null, workingDir);
其中workingDir
是:
workingDir-子进程的工作目录,如果子进程应该继承当前进程的工作目录,则返回null。
答案 1 :(得分:0)
如果您使用
运行第一个程序java x.y.Laj
然后您应该更改组成命令的行:
runProcess("java x.y.test2 "+credentials[0]+...
**后来**
由于x.y只是一个红色鲱鱼,请尝试设置系统属性:
runProcess("java -Djava.class.path=\"/.../x/y\" " + credentials[0]+...
对于生产(Laj不是从IDE开始)考虑设置CLASSPATH,以便可以通过类路径找到所有类文件。