kay*_*ahr 36 java windows batch-file launch4j winrun4j
我想在Windows 7上发布Java GUI应用程序.此应用程序使用Swing Toolkit,不需要任何本机代码.使用NSIS安装程序安装该应用程序.我想尽可能地将此应用程序集成到Windows 7中.这意味着:
WinRun4j是一个启动Java应用程序的EXE文件.因为应用程序没有分叉新的Java进程,Windows认为EXE文件是应用程序.所以任务栏没有问题.文件关联有效,因为文件可以简单地与EXE文件关联.
问题:
Launch4J创建了一个32位EXE,它启动了一个外部Java进程来启动Java应用程序.因此,与WinRun4J不同,它也可以启动64位Java.
问题:
System.out.printlnheaderType="gui"无论是否从控制台启动应用程序,都不会打印到控制台.在Windows上,您只需双击JAR文件即可启动该应用程序.安装JRE并不重要,只是工作.但...
问题:
像这样的简单批处理文件可用于启动应用程序:
@echo off
start c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar" %1
Run Code Online (Sandbox Code Playgroud)
可以为此批处理文件创建快捷方式以设置自定义图标.
问题:
c:\windows\syswow64,Windows不会自动从批处理文件重定向此调用.使用JAVA_HOME环境变量也是不可取的,因为Java不会自动设置它.可以仅创建启动应用程序的快捷方式,而不是使用批处理文件.它链接到这个命令:c:\windows\system32\javaw.exe -jar "c:\program files\myapp\myapp.jar".如果安装了32位Java JRE,Windows会自动将此调用重定向到SysWOW64目录.
问题:
还有另一种解决方案可以满足上述所有要求吗?或者有没有任何技巧来解决上述解决方案的问题?
使用Launch4j解决任务栏固定问题后,看起来是最好的解决方案.Launch4j可以很容易地集成到Maven项目中(使用这个或这个插件),配置非常简单,除了任务栏固定外,一切都是开箱即用的.对于任务栏固定,Java应用程序必须按照此问题的答案中的说明设置appModelUserId .
此外,Java应用程序必须由安装程序安装,安装程序必须至少安装一个指向EXE的快捷方式.此快捷方式还必须包含appModelUserId.使用NSIS,可以使用WinShell插件和这样的配置来完成:
CreateShortCut "$SMPROGRAMS\MyApp.lnk" \
"$INSTDIR\myapp.exe" "" "$INSTDIR\myapp.exe" 0 SW_SHOWNORMAL
WinShell::SetLnkAUMI "$SMPrograms\MyApp.lnk" "MyAppModelUserId"
Run Code Online (Sandbox Code Playgroud)
由于某些未知原因,此快捷方式必须存在.你不必使用它.您可以双击EXE,任务栏固定仍然有效.您甚至可以在应用程序文件夹的某个子文件夹中创建快捷方式.删除EXE文件的最后一个快捷方式时,任务栏固定停止工作.
试试Launch4j(http://launch4j.sourceforge.net/),它是一个简单的jar to exe包装器(实际上包装jar是可选的).它应该解决您的Icon和Taskbar要求.它还能够定位已安装的JRE(一些可配置的规则).我不太明白的字体问题,Swing应该根据Windows设置自动使用字体,除非你以某种方式在JRE选项或代码中覆盖它.
| 归档时间: |
|
| 查看次数: |
20948 次 |
| 最近记录: |