双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

java动态编译时 报java.lang.ClassNotFoundException

every888 every888 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
eclipse中java动态编译时出现了不能找到类
我的代码如下

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开发中无非就是告诉你类没有找到,那么什么原因导致没找到呢? 其

weixin_38557980

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

weixin_38624628

Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Transformer异常

主要介绍了Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type异常,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38642864

数据库驱动常见错误"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的问题

vingocyc

Java动态编译利器Janino:原理、实战与性能安全指南

在Java开发中,动态执行代码是构建灵活业务规则引擎、实现运行时逻辑配置的常见需求。其核心原理在于绕过传统的编译-部署流程,通过即时编译技术将源代码字符串直接转换为可执行的字节码。这项技术为系统带来了高度的可扩展性和快速响应业务变化的能力,尤其适用于风控策略、数据转换、低代码平台等需要热更新逻辑的场景。本文聚焦于Janino这一轻量级纯Java编译器,深入剖析其Expression Evaluator和Script Evaluator等核心模块的工作机制,并结合缓存策略与安全沙箱等工程实践,展示如何安全高效

cuemes08808
评论 12
收藏 已收藏
分享
返回顶部
every888
Java SE 62,621 成员 307,251 内容