java动态编译找不到类文件
代码如下:
在myeclipse中运行输出如下内容
JavaCode2376
0java.lang.ClassNotFoundException: JavaCode2376
for(int i=0;i<10;i++){System.out.println(i);}
找不到类文件
这是怎么回事?
谁能教我怎么解决?
package wmw.run.view;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author Every E-mail/MSN:mwgjkf@hotmail.com
* QQ:30130942
* @version 创建时间:Dec 30, 2008 3:34:57 PM
* 类说明:
*
*/
public class RuntimeCode{
/**编译器*/
private static com.sun.tools.javac.Main javac=new com.sun.tools.javac.Main();
/**等待用户输入JavaCode,然后编译、执行*/
public static void main(String[] args) throws Exception{
String code = "for(int i=0;i<10;i++){System.out.println(i);}";
// DataInputStream bd = new DataInputStream(System.in);
// byte[] brray= new byte[200];
// int i = bd.read(brray);
// code = new String(brray,0,i);
run(compile(code));
System.out.println(code);
}
/**编译JavaCode,返回临时文件对象*/
private synchronized static File compile(String code)throws IOException,Exception{
File file;
//在用户当前文件目录创建一个临时代码文件
file=File.createTempFile("JavaCode",".java",new File(System.getProperty("user.dir")));
//当虚拟机退出时,删除此临时java源文件
file.deleteOnExit();
//获得文件名和类名字
String filename=file.getName();
String classname=getClassName(filename);
System.out.println(classname);
//将代码输出到文件
PrintWriter out=new PrintWriter(new FileOutputStream(file));
out.write("class "+classname+"{"+"public static void main(String[] args)"+"{");
out.write(code);
out.write("}}");
//关闭文件流
out.flush();
out.close();
//编译代码文件
String[] args=new String[]{"-d",System.getProperty("user.dir"),filename};
//返回编译的状态代码
int status=javac.compile(args);
//处理编译状态
System.out.println(status);
return file;
}
/**执行刚刚编译的类文件*/
private static synchronized void run(File file){
//当虚拟机退出时,删除此临时编译的类文件
//获得文件名和类名字
String filename = file.getName();
String classname = getClassName(filename);
new File(file.getParent(),classname+".class").deleteOnExit();
try {
// 访问这个类
Class cls = Class.forName(classname);
//调用main方法
Method main = cls.getMethod("main", new Class[] { String[].class });
main.invoke(null, new Object[] { new String[0] });
}catch (SecurityException se) {
debug("access to the information is denied:" + se.toString());
}catch (NoSuchMethodException nme) {
debug("a matching method is not found or if then name is or : " + nme.toString());
}catch (InvocationTargetException ite) {
debug("Exception in main: " + ite.getTargetException());
}catch (Exception e){
debug(e.toString());
}
}
/**打印调试信息*/
private static void debug(String msg){
System.err.println(msg);
}
/**根据一个java源文件名获得类名*/
private static String getClassName(String filename){
return filename.substring(0,filename.length()-5);
}
}
在myeclipse中运行输出如下内容
JavaCode2376
0java.lang.ClassNotFoundException: JavaCode2376
for(int i=0;i<10;i++){System.out.println(i);}
找不到类文件
这是怎么回事?
谁能教我怎么解决?
...全文
相关推荐
错误:找不到或者无法加载主类
Java 环境变量配置和 Classpath 配置详解在 Java 开发中,遇到“找不到或无法加载主类”的错误是一个常见的问题。这是因为 Java 虚拟机(JVM)无法找到要执行的类文件。
在CMD下用java命令出现“找不到或无法加载主类”问题
在IT领域,尤其是在Java开发中,遇到“在CMD下用java命令出现‘找不到或无法加载主类’问题”是一个常见的挑战。
内存中动态编译执行java代码
首先,`javax.tools.JavaCompiler`是Java编译器工具接口,它是Java 6引入的一个新特性,提供了在运行时动态编译Java源码的能力。
Java找不到或无法加载主类及编码错误问题的解决方案
在进行Java程序开发时,我们经常会遇到两个常见的问题:一个是"找不到或无法加载主类",另一个是编码错误。下面,我们就来详细讲解这两个问题的产生原因以及如何进行解决。
IDEA 错误之找不到或无法加载主类的问题
在使用IntelliJ IDEA(IDEA)开发Java项目时,可能会遇到“找不到或无法加载主类”的错误。这个错误通常表明IDEA无法正确地识别和执行程序的入口点,即主类。


Eclipse
