如何在不面临依赖性问题的情况下从JAR调用方法? Java的

时间:2015-02-13 19:33:05

标签: java jar error-handling

示例:
这将存在于JAR中。

public class Foo {
    public void saySomething() {
        Log.d("Status","Got it!");
    }
}

这将存在于我的主类中。

public class Main {
    public void tryToGetSomething() {
        Foo.saySomething();
    }
}

显然,问题在于如果不包含JAR会抛出错误。我该如何解决这个问题?我如何对此进行保护性编码,以便在包含JAR时执行此操作,但如果未包含JAR则执行其他操作?

此外,对不起,如果代码没有意义,只需几秒钟就写完。你应该明白这个想法。

2 个答案:

答案 0 :(得分:1)

如果您尝试使用不存在的类/方法,则会抛出java.lang.NoClassDefFoundError。在这种情况下,您可以捕获此错误并提供备用行为:

try {
  Foo.saySomething();
} catch (NoClassDefFoundError e) {
  System.out.println("Load the jar");
}

有趣的是,由于它是一个已检查的异常,您将无法捕获也被抛出的ClassNotFoundException。可能值得查看this post,了解它们之间的区别,以确保您解决相应的问题。

答案 1 :(得分:1)

以下用于查找Foo类并调用该方法的反射代码将起作用。未导入jar时会出现异常,您可以正常处理。



try {
    Class clazz = Class.forName("Foo");
    Method method = clazz.getMethod("saySomething");
    Object obj = clazz.newInstance();
    method.invoke(obj);
 } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | InvocationTargetException ex) {
    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
 }