我有两个程序:一个CLI程序和一个GUI。 GUI是CLI的前端,也是另一个程序的GUI。
我正在导入CLI的类并在GUI中扩展它们以向类添加GUI元素,一切都很棒。
但是现在我想拆分我目前嵌入GUI的CLI(作为一个包含的JAR)。 JAR位于一个固定的位置(/opt/program/prog.jar),应用程序只能在Linux上使用,所以我意识到这会破坏传统的Java思想。
我已在Manifest文件中编辑了ClassPath以反映此更改,并且它工作正常。但是,当我删除文件时,GUI无法加载,因为无法加载该类。
有没有办法尝试加载一个类,如果它不起作用,那么再做一些其他的事情?本质上,我试图捕获ClassNotFound异常,但还没有运气。
答案 0 :(得分: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();
}
}
答案 1 :(得分: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...
}
}