【问题标题】:Executing a .jar which makes use of native libraries (Java , .dll)执行一个使用本地库(Java、.dll)的 .jar
【发布时间】:2014-07-19 01:28:28
【问题描述】:

我在 java 中有 2 个不同的项目,我需要对它们执行以下操作: 在程序A中的某个按钮被按下后,程序B被加载并且程序A被关闭。 尽管两个项目都有共同的类和 dll,但我真的不想将所有内容合并到一个项目中。

我进行了一些搜索,发现一种可能的解决方案是使用以下代码示例从 .jar 加载 程序 B

btnMyButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        try {
            Runtime.getRuntime().exec("java.exe -jar \\url\\ProgramB.jar");
        } catch (IOException e1) {
                e1.printStackTrace();
        }
    }
});

我尝试了许多变体(例如,没有".exe"),并确保ProgramB.jar 位于其dll 的同一文件夹中,但似乎没有任何效果。

所以,我尝试直接(通过 Windows)打开ProgramB.jar,显然一切正常。

后来,我尝试通过cmd执行ProgramB.jar(因为我认为命令"java.exe -jar \\url\\ProgramB.jar"可以在上面执行)。 即使我设置了库路径(java -Djava.library.path=\\url\\ -jar \\url\\ProgramB.jar),每次都会抛出UnsatisfiedLinkError(X.dll->找不到依赖库)。

(注意:我暂时无法提供所有异常消息,因为我现在没有程序...)

无论如何,我不确定我做错了什么,但显然 dll 实现没有任何问题, 因为我能够至少执行一次程序。欢迎任何想法。

【问题讨论】:

  • 抱歉编辑。现在好了!

标签: java dll jar


【解决方案1】:

问题是如果 dll 不在 java.path 中,java 无法识别 dll

所以第一个解决方案:

 put your dll in a java.path for example in windows C:\Windows\System32

第二种解决方案

Set a new java variable which indicating the path where exist .dll file.

VMoption 也必须是这样的: -Djava.library.path="path_to_dll"

这是不正确的 -Djava.library.path=path_to_dll\\dllname.dll

【讨论】:

  • 我尝试了您的两个建议,但在依赖库方面我一直遇到同样的问题...
猜你喜欢
  • 2023-02-22
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 2010-11-22
相关资源
最近更新 更多