java runtime exec 出错,关于linux下java getRuntime.exec()的问题

本人在做一个实验室项目,服务器tomcat,功能是用户通过浏览器端提交本人的java代码,然后服务器进行编译执行。在处理用户提交上来的代码时,本人使用Runtime.exec()去执行一个生成的脚本文件runJava.sh,该脚本内容很简单:(Main.java为用户提交的程序)

#!/bin/sh

cd /usr/local/tomcat/apache-tomcat-7.0.39/webapps/oops/Oops/34/c_all_qr_8e243677-6238-4150-9484-c057f3d90830/Answer/1120120745/Safla/project/src

javac Main.java

/usr/java/jdk1.6.0_30/bin/java Main C 9 >> /usr/local/tomcat/apache-tomcat-7.0.39/webapps/oops/Oops/34/c_all_qr_8e243677-6238-4150-9484-c057f3d90830/Answer/1120120745/Safla/out/C/4.txt

在测试时,能够生成Main.class文件,但是执行出现了以下错误:

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.

本人的java和tomcat环境变量都已经配好了,单独去编执行一个java文件也是ok的。实在不知道问题出在哪里,求高手解答。

解决方案

40

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");

}

}

40

引用:

Quote: 引用:

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");

}

}

本人也感觉是classpath的问题,可是看本人2楼那段代码,经测试是可用的啊,为什么一经过服务器去执行就不行了呢,还请二狗哥明示。

Working Directory的问题。

1. cd xxx

2. java yyy

不能用绝对路径执行java的class,必须进入class所在的目录才能执行:  java /A/B/yyy

20

ProcessBuilder pb = new ProcessBuilder(“java”, “Test2”);

pb.directory(new File(“/Users/Biao/Desktop/”)); // 关键在这里

这也是这里第一句是 java Test2

而第二句指定directory的原因所在

以前做浏览器上传代码到服务器编译,然后在服务器上执行,然后返回执行结果,正好用到这个功能,这也是那是记的笔记。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于linux下java getRuntime.exec()的问题!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值