Java程序运行时的ClassPath没有处理好,这个的话用ProcessBuilder会更方便。
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;public class ProcessBuilderTest {
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("java", "Test2");
pb.directory(new File("/Users/Biao/Desktop/")); // 关键在这里
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("End");
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;public class ProcessBuilderTest {
public static void main(String[] args) throws IOException {
ProcessBuilder pb = new ProcessBuilder("java", "Test2");
pb.directory(new File("/Users/Biao/Desktop/")); // 关键在这里
Process p = pb.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("End");
}
}
解决方案 »
- 急急急,strtus2和hibernate不兼容问题
- File f = new File(filePath) f.exists() 为false 求大神
- 文章内容检查是否类似如何实现?
- hibernate getCurrentSession和openSession的疑惑
- java多线程问题
- 关于filter的web.xml配置问题.
- WebSphere 中jsp调试问题,急,在线等 100 分
- 如果某个class的有个属性是对象数组,请问如何用xml配置文件生成该对象的该属性?
- struts的html:select标签的问题
- 请问大家关于struts中ActionErrors的问题
- weblogic部署项目 用cxf调用webservice时报错 用的maven
- 下载远程服务器目录
为了验证是否是我代码的问题,我将那段调用shell的代码单独拿出来,写了个测试类:public class Testbat {
public static void main(String args[]){
String cmd="/usr/local/tomcat/apache-tomcat-7.0.39/webapps/oops/Oops/33/test_all_mid_5361d7f8-2766-4672-9941-b106ec400685/Answer/1120120745/Tarantula/project/runJava.sh";//此为那个shell所在的目录
String s2;
try {
Process process=Runtime.getRuntime().exec(cmd);
BufferedReader bufferedReader2=new BufferedReader((new InputStreamReader(process.getInputStream())));
while((s2=bufferedReader2.readLine())!=null)
System.out.println(s2);
process.waitFor();
process.destroy();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然后去执行这段代码,最后得到了正确的结果。这让我很莫名其妙,单独去执行就可用,通过服务器调用就会出现上述异常,实在不懂了,求各位大虾帮帮忙。
1. cd xxx
2. java yyy不能用绝对路径执行java的class,必须进入class所在的目录才能执行: java /A/B/yyy
pb.directory(new File("/Users/Biao/Desktop/")); // 关键在这里这也是这里第一句是 java Test2
而第二句指定directory的原因所在
以前做浏览器上传代码到服务器编译,然后在服务器上执行,然后返回执行结果,正好用到这个功能,这也是那是记的笔记。
ProcessBuilder pb=new ProcessBuilder("java","Main","A","3","4","5");
pb.directory(new File("/usr/local/tomcat/apache-tomcat-7.0.39/webapps/oops/Oops/33/test_all_mid_5361d7f8-2766-4672-9941-b106ec400685/Answer/1120120745/Tarantula/project/src"));
Process process=pb.start();
经检测,在windows下可用,在linux下单独执行这段java也可用,但是在linux下通过tomcat执行就报错:Exception in thread "main" java.lang.NoClassDefFoundError: Main
this is getErrorStream:
Caused by: java.lang.ClassNotFoundException: Main
this is getErrorStream:
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
this is getErrorStream:
at java.security.AccessController.doPrivileged(Native Method)
this is getErrorStream:
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
this is getErrorStream:
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
this is getErrorStream:
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
this is getErrorStream:
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
this is getErrorStream:
Could not find the main class: Main. Program will exit.求解这是怎么回事呢