检测Java类是否可加载
我有两个程序:一个CLI程序和一个GUI。GUI是CLI的前端,也是另一个程序的GUI 我正在导入CLI的类并在GUI中扩展它们,以便向类添加GUI元素,一切都很好 但是现在我想拆分当前嵌入到GUI中的CLI(作为包含的JAR)。JAR位于一个固定的位置(/opt/program/prog.JAR),应用程序将只在Linux上使用,因此我意识到这打破了传统的Java思想 我在清单文件中编辑了类路径以反映这一更改,它运行良好。但是,当我删除该文件时,GUI无法加载,原因是无法加载该类 是否有一种方法可以尝试加载一个类,如果它不工作,则执行其他操作?本质上,我正在尝试捕捉ClassNotFound异常,但还没有任何运气 是否有一种方法可以尝试加载一个类,如果它不工作,则执行其他操作 假设您在C:\中有一个名为Foo.class的类文件检测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无法加载,原因是无法加载该类 是否有一种方
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();
}
}
这似乎正是我所需要的,但我需要在明天上班时试一试。希望明天早上某个时候能被录取。谢谢