jar包外的dll文件可以执行jar包使用,但是jar包打成exe应用程序就使用不了

allenklee 2017-11-19 05:27:15
问题如题,具体点就是
我有个java项目打成了jar包,里面使用了jna引用外部的dll文件
在cmd窗口直接执行jar包是可以成功调用起的。但是把jar包用exe4j打成exe应用程序之后就报找不到相关的dll文件的错误。求问该如何解决
...全文
763 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
给你看看我的工程,用netbeans生成的exe,调用外部dll。


设置工程属性:允许打包

点击工程,右键--> 打包


在工程生成的dist目录下,就有相关exe了。

此外,我也用exe4j做了一下,下面是代码。如果你搞不定,可以联系我,我给你打包成exe。
<?xml version="1.0" encoding="UTF-8"?>
<exe4j version="5.1" transformSequenceNumber="2">
<directoryPresets config="C:/SW-V5-Client1225/SW-V5-Client/dist" />
<application name="阿香" distributionSourceDir="C:/SW-V5-Client1225/SW-V5-Client/dist">
<languages>
<principalLanguage id="en" customLocalizationFile="" />
</languages>
</application>
<executable name="阿香" type="1" iconSet="true" iconFile="C:/SW-V5-Client1225/SW-V5-Client/dist/axiang.ico" executableDir="." redirectStderr="true" stderrFile="error.log" stderrMode="overwrite" redirectStdout="false" stdoutFile="output.log" stdoutMode="overwrite" failOnStderrOutput="true" executableMode="1" changeWorkingDirectory="true" workingDirectory="." singleInstance="true" serviceStartType="2" serviceDependencies="" serviceDescription="" jreLocation="" executionLevel="asInvoker" checkConsoleParameter="false" globalSingleInstance="false" singleInstanceActivate="true" dpiAware="false" amd64="false">
<messageSet />
<versionInfo include="false" fileVersion="" fileDescription="" legalCopyright="" internalName="" productName="" companyName="" productVersion="" />
</executable>
<splashScreen show="false" width="0" height="0" bitmapFile="" windowsNative="false" textOverlay="false">
<text>
<statusLine x="20" y="20" text="" fontSize="8" fontColor="0,0,0" bold="false" />
<versionLine x="20" y="40" text="version %VERSION%" fontSize="8" fontColor="0,0,0" bold="false" />
</text>
</splashScreen>
<java mainClass="login.SpringWindv1" vmParameters="-J-Xms1024m" arguments="" allowVMPassthroughParameters="true" preferredVM="" bundleRuntime="true" minVersion="1.6" maxVersion="1.9" allowBetaVM="true" jdkOnly="false">
<searchSequence>
<directory location="./jre1.8.0_121" />
</searchSequence>
<classPath>
<archive location="./SW-V5-Client.jar" failOnError="false" />
</classPath>
<nativeLibraryDirectories>
<directory name="./lib" />
</nativeLibraryDirectories>
<vmOptions />
</java>
<includedFiles />
<unextractableFiles />
</exe4j>
  • 打赏
  • 举报
回复
用netbeans之类的IDE,只要你的工程能正常运行。用netbeans导出exe。然后再用inno setup将exe和那些依赖包,包括dll,再次封装成一个exe。
「已注销」 2017-12-14
  • 打赏
  • 举报
回复
麻烦解决了共享下解决办法,我也是这样
allenklee 2017-11-22
  • 打赏
  • 举报
回复
引用 6 楼 yql1986 的回复:
你这个好像是将jar打包成可执行程序 我的意思,你用java -jar -Djava.library.path=xxx/xx.dll 这种形式 我之前有用JAVA调用C写的dll,你在网上搜下sigar 参照一下
引用 6 楼 yql1986 的回复:
你这个好像是将jar打包成可执行程序 我的意思,你用java -jar -Djava.library.path=xxx/xx.dll 这种形式 我之前有用JAVA调用C写的dll,你在网上搜下sigar 参照一下
我是要打成可执行程序啊,搞不懂这些调用问题 我还是找下项目范例吧 谢谢了
yql1986 2017-11-21
  • 打赏
  • 举报
回复
你这个好像是将jar打包成可执行程序 我的意思,你用java -jar -Djava.library.path=xxx/xx.dll 这种形式 我之前有用JAVA调用C写的dll,你在网上搜下sigar 参照一下
yql1986 2017-11-20
  • 打赏
  • 举报
回复
要在jvm参数中指定 dll路径 -Djava.library.path= xxx/xxx/xx.dll
allenklee 2017-11-20
  • 打赏
  • 举报
回复
引用 4 楼 allenklee 的回复:
[quote=引用 2 楼 yql1986 的回复:] 要在jvm参数中指定 dll路径 -Djava.library.path= xxx/xxx/xx.dll
这样写了还是不行。。是格式写错了吗 还是其他问题?[/quote]
引用 4 楼 allenklee 的回复:
[quote=引用 2 楼 yql1986 的回复:] 要在jvm参数中指定 dll路径 -Djava.library.path= xxx/xxx/xx.dll
这样写了还是不行。。是格式写错了吗 还是其他问题?[/quote] 上面的斜杠我也换成反斜杠了试过 不行
allenklee 2017-11-20
  • 打赏
  • 举报
回复
引用 2 楼 yql1986 的回复:
要在jvm参数中指定 dll路径
-Djava.library.path= xxx/xxx/xx.dll


这样写了还是不行。。是格式写错了吗 还是其他问题?
allenklee 2017-11-20
  • 打赏
  • 举报
回复
引用 2 楼 yql1986 的回复:
要在jvm参数中指定 dll路径 -Djava.library.path= xxx/xxx/xx.dll
等我下班了试试,先谢谢老哥了
allenklee 2017-11-19
  • 打赏
  • 举报
回复
没人遇过这问题吗?还是这问题太小白大神都不愿意答了

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧