java动态编译时 报java.lang.ClassNotFoundException
我的代码如下
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 = "";
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());
e.printStackTrace();
}
}
/**打印调试信息*/
private static void debug(String msg){
System.err.println(msg);
}
/**根据一个java源文件名获得类名*/
private static String getClassName(String filename){
return filename.substring(0,filename.length()-5);
}
}
错误如下
for(int i=0;i<10;i++){System.out.println(i);}
JavaCode423
0java.lang.ClassNotFoundException: JavaCode423
java.lang.ClassNotFoundException: JavaCode423
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)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at wmw.run.view.RuntimeCode.run(RuntimeCode.java:74)
at wmw.run.view.RuntimeCode.main(RuntimeCode.java:25)
for(int i=0;i<10;i++){System.out.println(i);}
哪位高手知道这是怎么回事
项目中我加入了tools.jar
谁能帮我解决下不胜感激
相关推荐
Android Caused by: java.lang.ClassNotFoundException解决办法
Android Caused by: java.lang.ClassNotFoundException解决办法 出现问题: 08-13 18:29:22.924: E/AndroidRuntime(1875): Caused by: Java.lang.ClassNotFoundException:XXXXX in loader dalvik.system.PathClassLoader[/data/app/XXXX.apk] 我想大家经常因为疏忽出现ClassNotFoundException的异常,这个异常在Android开发中无非就是告诉你类没有找到,那么什么原因导致没找到呢? 其
eclipse 报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver错误解决
一:查看你下载的MySQL和mysql-connector-java,如果不对应的话肯定会报错。 对应规则: mysql-connector-java-5 Connector/J version Driver Type JDBC version MySQL Server version Status 5.1 4 3.0, 4.0, 4.1, 4.2 4.1, 5.0, 5.1, 5.5, 5.6, 5.7 Recommended version 5.0 4 3.0 4.1, 5.0 Released version 3.1 4 3.0 4.1, 5.0 Obsolete
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer异常
主要介绍了Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
数据库驱动常见错误"java.lang.ClassNotFoundException:解决了jsp连接Error establishing socket.
"java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver" 解决方案 [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket. 解决了jsp连接 sql server 2000的问题
Java动态编译利器Janino:原理、实战与性能安全指南
在Java开发中,动态执行代码是构建灵活业务规则引擎、实现运行时逻辑配置的常见需求。其核心原理在于绕过传统的编译-部署流程,通过即时编译技术将源代码字符串直接转换为可执行的字节码。这项技术为系统带来了高度的可扩展性和快速响应业务变化的能力,尤其适用于风控策略、数据转换、低代码平台等需要热更新逻辑的场景。本文聚焦于Janino这一轻量级纯Java编译器,深入剖析其Expression Evaluator和Script Evaluator等核心模块的工作机制,并结合缓存策略与安全沙箱等工程实践,展示如何安全高效


Java SE

