2009-11-10 35 views
0

我有两个程序:一个CLI程序和一个GUI。 GUI是CLI的前端,也是另一个程序的GUI。检测Java类是否可加载

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

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

我已经编辑了Manifest文件中的ClassPath来反映这个改变,它工作正常。但是,当我删除文件时,GUI无法加载,理由是无法加载该类。

有没有办法尝试加载类,如果它不工作,然后做别的事情?本质上,我试图捕获ClassNotFound异常,但还没有运气。

回答

6

一种常见方法来检查是否存在类是刚做的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(); 
    } 
} 
+0

这似乎正是我需要的,但我明天上班时需要尝试一下。预计明天早上某个时候会被接受。谢谢! – HalfBrian 2009-11-10 02:01:06

1

有没有办法尝试加载类,如果它不工作,然后做别的事情?

假设你已经在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... 
    } 

}