【问题标题】:Dynamic class loading: Why Null pointer exception动态类加载:为什么空指针异常
【发布时间】:2015-06-11 17:46:38
【问题描述】:

我有一个 java 应用程序,它在 bin 目录中包含一个名为“Loadedstrategies”的文件夹。此文件夹包含一些我动态加载的 jar 文件。从 Eclipse 运行时应用程序工作正常,但是当我将应用程序转换为 jar 文件并运行 jar 文件时,会引发空指针异常。 以下语句抛出空指针异常

URL url=(ClassLoader.getSystemResource("Loadedstrategies"));

我打印了 url 的值为 null 即上面的语句没有使用 url。

我将我的 jar 文件保存在路径 bin/Loadedstrategies。我的应用程序通过上述语句从 Eclipse 正确地从 bin/Loadedstrategies 加载 jar 文件,但当我将应用程序转换为 jar 时却没有。请帮帮我

【问题讨论】:

  • 请尝试使用完全限定名,而不仅仅是类名。
  • 在Eclipse中导出时,可以更改Library handling。您可以在此处选择是否将库导入到 .jar 文件中,或者是否将库包含在外部。也许你需要玩弄这个,让 .jar 工作
  • 您是否尝试从另一个 jar 中加载 jar?你的问题不是很清楚。

标签: java eclipse jar classloader executable-jar


【解决方案1】:

我最近需要这样的东西并做了以下事情:

URL myurl = new URL("file://" + PATH_TO_YOUR_JAR);  
URLClassLoader classloader = URLClassLoader.newInstance(new URL[]{myurl});  
Class<MY_INTERFACE> myclass = = (Class<MY_INTERFACE>) classloader.loadClass(NAME_OF_YOUR_CLASS);
MY_INTERFACE myinst = myclass.newInstance();

附言"file://" 用于 linux,对于 windows 尝试使用 "file:///" 您可以使用 System.getProperty("os.name") 来检查操作系统

【讨论】:

  • 正如我所提到的,我将我的应用程序作为可运行的 jar 文件提供,并且我的客户端可以将该 jar 文件存储在我不知道的任何路径中,因此我的动态可加载 jar 的完整路径是未知的。唯一已知的是,我的应用程序的可运行 jar 文件包含一个名为 Loadedstrategies 的文件夹,其中包含我需要动态加载的 jar 文件。请告诉我如何指定 Loadedstrategies 文件夹的路径。
  • 这正是我的情况... jar 的路径可以作为您的应用程序或应用程序方法的参数提供...试试看...它有效!跨度>
  • 我不希望用户在运行我的应用程序后陷入提供复杂路径的困难。告诉我你知道如何指定存储在 My application runnable jar 文件中的 Loadedstrategies 文件夹的路径。
【解决方案2】:

我了解您的组织如下:

application jar
 |_ bin
 |   |_ Loadedstrategies
 |_ src
 ...

如果是这样使用:

URL url = ClassLoader.getSystemResource("bin/Loadedstrategies");

【讨论】:

  • Loadedstrategies 是一个文件夹,其中包含我需要加载和运行的 jar 文件动态加载的策略不是 jar 文件。请理解我真正的问题。我的问题是“如何指定包含我的动态jar文件的名为loadedstrategies的文件夹的路径。loadedstrategies是我的应用程序jar文件中的一个文件夹。我想动态读取loadedstrategies文件夹的路径。
  • 在我的回答中,我没有说 Loadedstrategies 是一个 jar 文件。我刚刚介绍了两种获取 Loadedstrategies 文件夹路径的方法。
  • 抱歉,我错过了 Loadedstrategies 在您的应用程序 jar 中。我更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多