代码之家  ›  专栏  ›  技术社区  ›  HalfBrian

检测Java类是否可加载

  •  0
  • HalfBrian  · 技术社区  · 15 年前

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

    我正在导入CLI的类,并在GUI中对它们进行扩展,以便将GUI元素添加到类中,这一切都非常好。

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

    我已经编辑了清单文件中的类路径来反映这个更改,它工作得很好。但是,当我删除文件时,由于无法加载类,GUI无法加载。

    有没有一种方法可以尝试加载一个类,如果它不起作用,那么就做其他事情?本质上,我试图抓住ClassNotFound异常,但还没有找到任何运气。

    2 回复  |  直到 15 年前
        1
  •  6
  •   Alex Miller    15 年前

    检查类存在性的一种常见方法是只执行class.forname(“my.class”)。您可以用一个try/catch来包装它,该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();
      }
    } 
    
        2
  •  1
  •   Amir Afghani    15 年前

    有没有一种方法可以尝试加载一个类,如果它不起作用,那么就做其他事情?

    假设您在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...
        }
    
    }