为什么在使用 Class.forName(...) 时会出现 ClassNotFoundException?

2024-04-14

在下面的示例中,我尝试使用sun.tools.javac.Main动态编译我生成的类,然后实例化该类的对象并调用方法。到目前为止,我什至无法通过加载生成的类。我在 Eclipse 中遇到以下异常:

java.lang.ClassNotFoundException: TestHello_1289950330167
    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 MyClassGenerator.runIt(MyClassGenerator.java:47)
    at MyClassGenerator.main(MyClassGenerator.java:13)
Note: sun.tools.javac.Main has been deprecated.
1 warning
Running TestHello_1289950330167:

这是代码:

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.net.URL;
import java.net.URLClassLoader;

public class MyClassGenerator {
    String generatedClassName = "TestHello_" + System.currentTimeMillis();
    String javaFileName = this.generatedClassName + ".java";

    public static void main(final String args[]) {
        final MyClassGenerator mtc = new MyClassGenerator();
        mtc.createIt();
        if (mtc.compileIt()) {
            System.out.println("Running " + mtc.generatedClassName + ":\n\n");
            mtc.runIt();
        }
        else {
            System.out.println(mtc.javaFileName + " is bad.");
        }
    }

    public void loadIt() {

        final ClassLoader classLoader = MyClassGenerator.class.getClassLoader();

        try {
            final Class aClass = classLoader.loadClass(this.generatedClassName);
            System.out.println("Loaded " + aClass.getName());
        }
        catch (final ClassNotFoundException e) {
            e.printStackTrace();
        }

    }

    public void createIt() {
        try {
            final FileWriter aWriter = new FileWriter(this.javaFileName, true);
            aWriter.write("public class " + this.generatedClassName + " { }");
            aWriter.flush();
            aWriter.close();
        }
        catch (final Exception e) {
            e.printStackTrace();
        }
    }

    public boolean compileIt() {
        final String[] source = { new String(this.javaFileName) };
        final ByteArrayOutputStream baos = new ByteArrayOutputStream();

        new sun.tools.javac.Main(baos, source[0]).compile(source);

        System.out.print(baos.toString());

        return (baos.toString().indexOf("error") == -1);
    }

    public void runIt() {
        try {
            final File file = new File(this.javaFileName);
            final URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { file.toURI().toURL() });
            final Class<?> cls = Class.forName(this.generatedClassName, true, classLoader);
        }
        catch (final Exception e) {
            e.printStackTrace();
        }
    }
}

因为它不在类路径中。将其写入类路径(或将其根路径添加到类路径)或使用URLClassLoader http://download.oracle.com/javase/6/docs/api/java/net/URLClassLoader.html.

File root = new File(".");
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() });
Class<?> cls = Class.forName(generatedClassName, true, classLoader);

在中使用相对路径java.io顺便说一句,这是一个坏主意。您依赖于当前工作目录,该目录无法在代码中控制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在使用 Class.forName(...) 时会出现 ClassNotFoundException? 的相关文章

  • 为什么反射搜索会突然找不到任何东西?

    我根据这个问题的答案有以下代码如何获取 ASP NET C 中请求的文件的 MIME 类型 https stackoverflow com questions 1302264 how do i get the mime type of a
  • 从 java sdk 向对等方发送提案时出现访问被拒绝错误

    我正在尝试使用以下代码查询区块链并收到访问被拒绝错误 我也遇到同样的错误sendTransactionProposal方法也是如此 UserContext adminUserContext RegisterEnrollUser regist
  • @RestController 没有 @ResponseBody 方法工作不正确

    我有以下控制器 RestController RequestMapping value base url public class MyController RequestMapping value child url method Req
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • 如何根据运行的 jar 的结果让我的 ant 任务通过或失败?

    我正在运行 CrossCheck 无浏览器 js 单元测试 作为 ant 脚本的一部分 如果 CrossCheck 测试失败 我希望 ant 报告失败 这是 build xml 中的相关部分
  • 什么时候可以在 Java 中使用 Thead.stop() ?

    Thread stop 的 Java 文档听起来好像如果您调用 Thread stop 世界就会终结 已弃用 这种方法本质上是不安全的 停止线程 Thread stop 导致它解锁所有已锁定的监视器 作为未经检查的 ThreadDeath
  • 如何使用 Hibernate (EntityManager) 或 JPA 调用 Oracle 函数或过程

    我有一个返回 sys refcursor 的 Oracle 函数 当我使用 Hibernate 调用该函数时 出现以下异常 Hibernate call my function org hibernate exception Generic
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 使用架构注册表对 avro 消息进行 Spring 云合约测试

    我正在查看 spring 文档和 spring github 我可以看到一些非常基本的内容examples https github com spring cloud samples spring cloud contract sample
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • Java Swing:需要一个高质量的带有复选框的开发 JTree

    我一直在寻找一个 Tree 实现 其中包含复选框 其中 当您选择一个节点时 树中的所有后继节点都会被自动选择 当您取消选择一个节点时 树中其所有后继节点都会自动取消选择 当已经选择了父节点 并且从其后继之一中删除了选择时 节点颜色将发生变化
  • OpenCSV:将嵌套 Bean 映射到 CSV 文件

    我正在尝试将 bean 映射到 CSV 文件 但问题是我的 bean 具有其他嵌套 bean 作为属性 所发生的情况是 OpenCSV 遍历属性找到一个 bean 然后进入其中并映射该 bean 内的所有数据 如果找到另一个 bean 它就
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 将 Apache Camel 执行器指标发送到 Prometheus

    我正在尝试转发 添加 Actuator Camel 指标 actuator camelroutes 将交换 交易数量等指标 发送到 Prometheus Actuator 端点 有没有办法让我配置 Camel 将这些指标添加到 Promet
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo

随机推荐

  • Azure Python Flask应用程序-AD身份验证问题

    解释起来可能有点复杂 所以我会尽力而为 目前的解决方案 我有一个 python Flask 应用程序 它将部署到 Azure 中的应用程序服务 我希望用户通过 Azure AD 身份验证登录到应用程序服务 为此 我使用 ADAL 库 因为我
  • mkbundle 和 GTK#

    我正在尝试使用 mkbundle 以便我可以分发 GTK 应用程序 而无需用户安装 NET Mono 或 GTK 我已经成功捆绑了一个使用 winforms 的应用程序 但由于某种原因 当我对 GTK 应用程序执行相同操作时 它无法工作 这
  • 张量流在梯度计算过程中如何处理不可微节点?

    我理解自动微分的概念 但找不到任何解释张量流如何计算不可微函数的误差梯度 例如tf where在我的损失函数中或tf cond在我的图表中 它工作得很好 但我想了解张量流如何通过这些节点反向传播误差 因为没有公式可以计算它们的梯度 如果是t
  • Android getMaxAddressLineIndex 对于第 1 行返回 0

    由于某种原因 getMaxAddressLineIndex 的实现最近发生了变化 现在 该方法对第 1 行返回 0 我有一个现有的代码 它曾经有效 i
  • 没有超级权限无法创建简单的MySQL函数

    我一直在毫无问题地创建存储过程 但是当尝试创建一个返回结果的简单函数时COUNT 在桌子上运行函数 我得到 错误 1418 此函数没有 DETERMINISTIC NO SQL 或 READS 其声明中的 SQL DATA 和二进制日志记录
  • 多线程应用程序无法编译并出现错误链

    我介绍了error chain到以前工作的应用程序中 错误本身很清楚 std error Error static缺乏实施trait std marker Send error E0277 the trait bound std error
  • “Monkey Business”C++ 程序 - 完成 99% [已关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在尝试使用旧教科书自学 C 非常感谢您的意见 我可以在线找到该程序的工作代码 但我想让我的代码在尝试完全不同的方法之前工作 我需要编写一
  • Java中“不鼓励引用”是什么意思?

    我在 Eclipse 的编译器设置中注意到了这个设置 这与 禁止引用 有何不同 来自对已接受答案的评论如何在 Eclipse 中以编程方式打开查找类型对话框 https stackoverflow com questions 1218801
  • 在 AWS RDS Oracle 数据库中导入 .dmp 文件时出错

    我已遵循AWS将数据导入RDS https docs aws amazon com AmazonRDS latest UserGuide Oracle Procedural Importing html guide 我已经复制了 dmp文件
  • 从流中读取多个 protobuf 消息的 python 示例

    我正在处理来自 spinn3r 的数据 它由序列化为字节流的多个不同的 protobuf 消息组成 http code google com p spinn3r client wiki Protostream http code googl
  • 如果没有“typedef”,如何创建在 C# 泛型中使用的相关类型组?

    作为一名 C 背景的人 我遇到过以下情况 鉴于 c 不支持 typedef 如何以编程方式关联类型 也就是说 在 C 中 我可以将相关类型存储为 typedef 以便在与模板一起使用时进行检索 在 C 中无法以同样的方式完成同样的事情 因为
  • 结构数组在排序时给出错误的输出

    1 我有一个结构 struct node char symbol int freq int left right root int value short is sorted struct node data 1000 其中 data 21
  • 父级的 componentDidMount 是否在子级的所有 componentDidMount 之后被调用?

    我的父渲染中有下面的代码 div this state OSMData map function item index return div
  • iOS:移动设备管理

    我对 MDM 有点困惑 希望有人可以帮助我 我已经研究了Apple网站上有关iOS MDM的文档 但仍然感到困惑 我有一些问题 MDM服务器每次需要执行命令时是否都在与APNS通信 设置我们自己的 MDM 服务器是否非常复杂以及如何设置我们
  • 使用 GLFW + GLEW 时 glGenFramebuffers() 访问冲突

    我收到此错误 执行位置 0x00000000 时发生访问冲突 当我在 Windows 上使用 GLFW GLEW 时 我使用的是 Windows 7 我也有自己的实现 从头开始 它创建一个窗口 初始化 OpenGL 上下文 初始化 GLEW
  • Django-compressor、Heroku、S3:请求已过期

    我在 Heroku 上使用 django compressor 和 amazon s3 提供静态文件 并且使用压缩器生成的静态文件链接不断遇到以下错误 我对 compressor 和 s3 完全陌生 https xxx s3 amazona
  • Susy 2:具有流动主要内容区域的固定宽度侧边栏

    使用 Susy 2 候选版本 我试图弄清楚如何创建一个带有固定宽度侧边栏的简单流体布局 无论是左侧位置还是右侧位置 我很高兴使用第一个和最后一个关键字 谁能告诉我如何在 Susy 2 中执行此操作 谢谢你 有几种方法可以混合固定 流体布局
  • 如何检测您的 Android 应用程序是否位于前台 (API 21)

    当收到 GCM 消息时 我的应用程序的行为取决于它是否位于前台 在 API 21 之前 我使用了以下内容 Boolean onForeground this getPackageName equalsIgnoreCase ActivityM
  • 绕局部轴旋转

    我正在尝试实现一个对象 围绕一个位置 POI 兴趣点 飞行并面向它 当您按 WASD 时 您可以更改 POI 的旋转 A 和 D gt 更改 y 轴 W 和 S 更改 x 轴 正如您在演示中看到的 http jsbin com yodusu
  • 为什么在使用 Class.forName(...) 时会出现 ClassNotFoundException?

    在下面的示例中 我尝试使用sun tools javac Main动态编译我生成的类 然后实例化该类的对象并调用方法 到目前为止 我什至无法通过加载生成的类 我在 Eclipse 中遇到以下异常 java lang ClassNotFoun