检测Java类是否可加载

检测Java类是否可加载,java,class,dynamic,classloader,Java,Class,Dynamic,Classloader,我有两个程序:一个CLI程序和一个GUI。GUI是CLI的前端,也是另一个程序的GUI 我正在导入CLI的类并在GUI中扩展它们,以便向类添加GUI元素,一切都很好 但是现在我想拆分当前嵌入到GUI中的CLI(作为包含的JAR)。JAR位于一个固定的位置(/opt/program/prog.JAR),应用程序将只在Linux上使用,因此我意识到这打破了传统的Java思想 我在清单文件中编辑了类路径以反映这一更改,它运行良好。但是,当我删除该文件时,GUI无法加载,原因是无法加载该类 是否有一种方

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

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

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

我在清单文件中编辑了类路径以反映这一更改,它运行良好。但是,当我删除该文件时,GUI无法加载,原因是无法加载该类

是否有一种方法可以尝试加载一个类,如果它不工作,则执行其他操作?本质上,我正在尝试捕捉ClassNotFound异常,但还没有任何运气

是否有一种方法可以尝试加载一个类,如果它不工作,则执行其他操作

假设您在C:\中有一个名为Foo.class的类文件

public static void main(String[] args) {

    File f = new File("c:\\");
    if (f.exists()) {
        URLClassLoader CLoader;
        try {
            CLoader = new URLClassLoader(new URL[]{f.toURL()});
            Class loadedClass = CLoader.loadClass("Foo");
        } catch (ClassNotFoundException ex) {
        } catch (MalformedURLException ex) {
        }

    } else {
        //do something else...
    }

}

检查类是否存在的一种常见方法是只执行class.forName(“my.class”)。您可以用一个try/catch来包装它,它捕获ClassNotFoundException并决定要做什么。如果需要,可以在具有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();
  }
} 

这似乎正是我所需要的,但我需要在明天上班时试一试。希望明天早上某个时候能被录取。谢谢