急!!!关于Javac和Java命令,在程序代码中调用该命令编译和运行任意位置的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急!!!关于Javac和Java命令,在程序代码中调用该命令编译和运行任意位置的文件相关的知识,希望对你有一定的参考价值。

在D:/test/下有一个类test.java,代码如下:
public class test

public static void main(String[] args)

System.out.println("JavaCompiler测试成功!");


然后在test下还有一个类test_compilerapi.java,代码如下:
import java.io.*;

import javax.tools.*;

public class test_compilerapi

public OutputStream go(OutputStream out) throws IOException
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int results = compiler.run(null, null, out, "D:/test/test.java");
System.out.println((results == 0) ? "编译成功" : "编译失败");
// 在程序中运行test
Runtime run = Runtime.getRuntime();
Process p = run.exec("java test");
BufferedInputStream in = new BufferedInputStream(p.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String s;
while ((s = br.readLine()) != null)
System.out.println(s);
return out;


public static void main(String args[]) throws IOException

File f1 = new File("demo1.txt");
try
OutputStream ss=new BufferedOutputStream(new FileOutputStream(f1));
ss=new test_compilerapi().go(ss);
ss.write(ss.toString().length());
ss.close();
catch(Exception e)




如果我在D:/test下用DOS编译和运行test_compilerapi.java,可以在窗口中得到test.java的运行结果,当我把JDK的ClassPath值设置为:.;d:\test\后,在任意位置使用DOS运行test_compilerapi.java也可以得到,问题:
1.如果我为test.java加上包名,则不能得到运行结果。
2.将test_compilerapi.java复制到Eclipse的一个项目中,当然这个项目的存放目录不是D:/test,那么即使ClassPath设置成上述值,仍然不能得到test.java的运行结果,这是为什么?在Eclipse中运行和在电脑的任意位置用DOS运行有什么不同?
急!敬请指教,如果可以,一定多给分!
不说包名的问题了,所有的源文件都没有包名。现在的问题是:将test_compilerapi.java复制到Eclipse的一个项目中,当然这个项目的存放目录不是D:/test,而且ClassPath设置成上述值,已经可以得到test.java的运行结果了,但是当我把test_compilerapi.java(它是含有main函数的)中的代码几乎原封不动的复制到一个Struts+Hibernate的项目中的Action类中时,就不行 了,又得不到结果了。见鬼了。

这个是这样的啊,有两种解决办法

一:把包去掉
二:运行时候加上这个

java wo/Helloworld1

为什么会出现这样的原因呢?

因为打包的时候已经把.class文件打包到wo的文件夹下去了

而java命令执行的时候是在当前目录下找.class文件,如果找不到就会出错

所以。。。。。

呵呵

给你做个示范

C:\>javac -d . Helloworld1.java //打包

C:\>java Helloworld1
Exception in thread "main" java.lang.NoClassDefFoundError: Helloworld1 (wrong na
me: wo/Helloworld1)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Helloworld1. Program will exit.

成功后的是这样的:

C:\>java wo/Helloworld1
Hello world!

讲的不是很多,但原理就这样的哦
参考技术A 有了包名的话就得
java 报名.test才能执行啊。否者找不到类。你的第二个问题也是这个。加上包名试试
参考技术B can kao: http://hi.baidu.com/christal_yhy/blog/item/965d28a3c69da4a4caefd03b.html 参考技术C Process p = run.exec("java test");
这里 可以改成 run.bat
run.bat中内容为
cd 目录
java test

直接java class文件应该是可以的
前面加上路径肯能会有问题

以上是关于急!!!关于Javac和Java命令,在程序代码中调用该命令编译和运行任意位置的文件的主要内容,如果未能解决你的问题,请参考以下文章

java问题求答案.急!!

在linux下怎么编译和运行java程序

JDK如何编译JAVA文件 !急!!

编译JAVA程序成功但运行javac命令时出现错误

编译JAVA程序成功但运行javac命令时出现错误

如何用javac 和java 编译运行整个Java工程