检测Java类是否可加载

Hal*_*ian 0 java class dynamic classloader

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

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

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

我已经在Manifest文件中编辑了ClassPath以反映这一变化,并且它工作正常.但是,当我删除该文件时,GUI无法加载,因为无法加载该类.

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

Ale*_*ler 6

检查类存在的一种常用方法是只执行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();
  }
} 
Run Code Online (Sandbox Code Playgroud)