java - 检测Java类是否可加载

标签 java class dynamic classloader

我有两个程序:一个 CLI 程序和一个 GUI 程序。 GUI 是 CLI 的前端,也是另一个程序的 GUI。

我正在导入 CLI 的类并在 GUI 中扩展它们以将 GUI 元素添加到类中,一切都很棒。

但现在我想拆分当前已嵌入 GUI 中的 CLI(作为包含的 JAR)。 JAR位于固定位置(/opt/program/prog.jar),并且该应用程序只能在Linux上使用,所以我意识到这打破了传统的Java思想。

我已经编辑了 list 文件中的 ClassPath 以反射(reflect)此更改,并且它工作正常。但是,当我删除该文件时,GUI 无法加载,因为无法加载该类。

有没有办法尝试加载一个类,如果它不起作用,那么就做其他事情?本质上,我试图捕获 ClassNotFound 异常,但还没有任何运气。

最佳答案

检查类是否存在的一种常见方法是执行 Class.forName("my.Class")。您可以使用捕获 ClassNotFoundException 的 try/catch 来包装它并决定要做什么。如果需要,您可以在具有 main() 的包装类中执行此操作。您可以尝试加载该类,如果成功,则在加载的类上调用 main() ,如果没有,则执行其他操作。

public static void main(String arg[]) {
  try { 
    Class.forName("my.OtherMain");

    // worked, call it
    OtherMain.main();
  } catch(ClassNotFoundException e) {
    // fallback to some other behavior
    doOtherThing();
  }
} 

关于java - 检测Java类是否可加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1705151/

相关文章:

.net - 运行时的 TableLayoutPanel 行和列

java - java DOM 解析器异常

java - CheckStyle 对我不起作用

java - 性能与内存列表

java - StAX 不检索属性的数据

c++ - 我可以在同一个类中创建对象吗?

java - Java中根据某些条件确定实现类

c# - 我可以在另一个方法中调用静态方法吗?

javascript - 如何获取所有子元素输入

java - 多个子类,如何实例化其中的任何一个?