我正在使用Eclipse
SWT库进行GUI渲染,用Java为桌面编写一个应用程序。我认为SWT帮助Java克服了在桌面上接受的最大障碍:即为Java应用程序提供一致的,响应式的界面,该界面看起来与桌面上其他任何应用程序的界面都一样。但是,我觉得打包应用程序仍然是一个问题。
OS X本机提供了一种将Java应用程序包装在本机应用程序包中的简便机制,但是为Windows /
Linux生成不需要用户运行丑陋的批处理文件或单击.jar的应用程序仍然很麻烦。在Linux上,这可能不是一个问题,在Linux上,用户可能更精通技术,但是在Windows上,我希望有一个常规的.exe供他/她运行。
有没有人对使用Java的.exe生成工具有任何经验?我尝试了JSmooth,但是遇到了各种各样的问题。在我推出Visual
Studio并推出自己的产品之前,还有更好的解决方案吗?
编辑: 也许我应该提到我无法在商业解决方案上花费很多钱。
为了跟进pauxu的回答,我在我的一个项目中使用了launch4j和NSIS,并认为展示我的使用方式会有所帮助。这是我为Windows做的事情。顺便说一句,我正在为Mac创建.app和.dmg,但是还没有弄清楚Linux怎么做。
在我的项目中,我有一个“供应商”目录,在它的下面有一个“ launch4j”和“
nsis”目录。每个文件中都有每个应用程序的安装副本。我发现在项目本地拥有一个副本比强迫其他人安装两个产品并设置某种指向每个产品的环境变量要容易得多。
我的项目中还有一个“脚本”目录,其中包含项目的各种配置/脚本文件。首先是launch4j.xml文件:
<launch4jConfig>
<dontWrapJar>true</dontWrapJar>
<headerType>gui</headerType>
<jar>rpgam.jar</jar>
<outfile>rpgam.exe</outfile>
<errTitle></errTitle>
<cmdLine></cmdLine>
<chdir>.</chdir>
<priority>normal</priority>
<downloadUrl>http://www.rpgaudiomixer.com/</downloadUrl>
<supportUrl></supportUrl>
<customProcName>false</customProcName>
<stayAlive>false</stayAlive>
<manifest></manifest>
<icon></icon>
<jre>
<path></path>
<minVersion>1.5.0</minVersion>
<maxVersion></maxVersion>
<jdkPreference>preferJre</jdkPreference>
</jre>
<splash>
<file>..\images\splash.bmp</file>
<waitForWindow>true</waitForWindow>
<timeout>60</timeout>
<timeoutErr>true</timeoutErr>
</splash>
</launch4jConfig>
然后是NSIS脚本rpgam-setup.nsis。可以使用VERSION参数来帮助命名文件。
; The name of the installer
Name "RPG Audio Mixer"
!ifndef VERSION
!define VERSION A.B.C
!endif
; The file to write
outfile "..\dist\installers\windows\rpgam-${VERSION}.exe"
; The default installation directory
InstallDir "$PROGRAMFILES\RPG Audio Mixer"
; Registry key to check for directory (so if you install again, it will
; overwrite the old one automatically)
InstallDirRegKey HKLM "Software\RPG_Audio_Mixer" "Install_Dir"
# create a default section.
section "RPG Audio Mixer"
SectionIn RO
; Set output path to the installation directory.
SetOutPath $INSTDIR
File /r "..\dist\layout\windows\"
; Write the installation path into the registry
WriteRegStr HKLM SOFTWARE\RPG_Audio_Mixer "Install_Dir" "$INSTDIR"
; Write the uninstall keys for Windows
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "DisplayName" "RPG Audio Mixer"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "UninstallString" '"$INSTDIR\uninstall.exe"'
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer" "NoRepair" 1
WriteUninstaller "uninstall.exe"
; read the value from the registry into the $0 register
;readRegStr $0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion
; print the results in a popup message box
;messageBox MB_OK "version: $0"
sectionEnd
Section "Start Menu Shortcuts"
CreateDirectory "$SMPROGRAMS\RPG Audio Mixer"
CreateShortCut "$SMPROGRAMS\RPG Audio Mixer\Uninstall.lnk" "$INSTDIR\uninstall.exe" "" "$INSTDIR\uninstall.exe" 0
CreateShortCut "$SMPROGRAMS\RPG AUdio Mixer\RPG Audio Mixer.lnk" "$INSTDIR\rpgam.exe" "" "$INSTDIR\rpgam.exe" 0
SectionEnd
Section "Uninstall"
; Remove registry keys
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\RPGAudioMixer"
DeleteRegKey HKLM SOFTWARE\RPG_Audio_Mixer
; Remove files and uninstaller
Delete $INSTDIR\rpgam.exe
Delete $INSTDIR\uninstall.exe
; Remove shortcuts, if any
Delete "$SMPROGRAMS\RPG Audio Mixer\*.*"
; Remove directories used
RMDir "$SMPROGRAMS\RPG Audio Mixer"
RMDir "$INSTDIR"
SectionEnd
我的Ant构建文件(build.xml)中有一些目标可以处理上述问题。首先,我打电话给Ant导入launch4j的Ant任务:
<property name="launch4j.dir" location="vendor/launch4j" />
<taskdef name="launch4j"
classname="net.sf.launch4j.ant.Launch4jTask"
classpath="${launch4j.dir}/launch4j.jar:${launch4j.dir}/lib/xstream.jar" />
然后,我有了一个用于创建包装可执行文件的简单目标:
<target name="executable-windows" depends="jar" description="Create Windows executable (EXE)">
<launch4j configFile="scripts/launch4j.xml" outfile="${exeFile}" />
</target>
制作安装程序的另一个目标:
<target name="installer-windows" depends="executable-windows" description="Create the installer for Windows (EXE)">
<!-- Lay out files needed for building the installer -->
<mkdir dir="${windowsLayoutDirectory}" />
<copy file="${jarFile}" todir="${windowsLayoutDirectory}" />
<copy todir="${windowsLayoutDirectory}/lib">
<fileset dir="${libraryDirectory}" />
<fileset dir="${windowsLibraryDirectory}" />
</copy>
<copy todir="${windowsLayoutDirectory}/icons">
<fileset dir="${iconsDirectory}" />
</copy>
<copy todir="${windowsLayoutDirectory}" file="${exeFile}" />
<mkdir dir="${windowsInstallerDirectory}" />
<!-- Build the installer using NSIS -->
<exec executable="vendor/nsis/makensis.exe">
<arg value="/DVERSION=${version}" />
<arg value="scripts/rpgam-setup.nsi" />
</exec>
</target>
上面的部分只是将安装程序所需的文件复制到一个临时位置,而下半部分执行使用所有脚本制作安装程序的脚本。
问题内容: 我已经搜索了一下,但找不到为此的现有工具。 我有一个node.js Web服务器,该服务器旨在运行在您自己的计算机上,该计算机可以为您做一些令人眼花things乱的事情。如果我可以双击而不是安装nodejs和npm并在命令行上运行,那将是非常棒的。 该可执行文件将后台处理节点服务器,并打开一个简单的本机Webkit窗口,该窗口将显示如果我在命令行上运行通常会显示的内容。 然后,可以说该
谢谢你的帮助, 卢卡斯
显然,可以仅通过程序的名称来引用程序的图标,如下所示: 尝试用替换,图标将会改变,甚至可以删除引号。显然,这里有某种抽象在起作用(我喜欢那些)。(我知道。Desktop文件和xdg工具)1.但是是否有一个CLI要显示(甚至更hefpul:如果找不到就不显示,抛出错误))这些图标的方式,比如?(不起作用。)我想这样做,显示我所显示的程序的图标,有时说程序来自更大的包,所以我没有真正的方法知道它是否安
在学习这本书的过程中,你已经掌握了很多关于 Git 的命令。虽然这些是在学习过程中不可缺少的,但是版本控制的核心并不是让你学习所有的命令和参数。 当你掌握一些基本的概念,再加上一个带有用户图形界面的应用程序的帮助,就可以让你的日常工作变得更加简单。一个最大的好处就是它会为你提供了一个可视化的用户操作界面。 在桌面应用程序中,很多任务使用起来会更加容易和更方便。并且你也不需要记住那几十个繁琐的 Gi
因此,我使用Microsoft示例进行了培训,这些示例可在以下站点获得:http://code.msdn.Microsoft.com/windowsdesktop/sending-toast-notifications-71e230a2/ 它工作良好,但我必须创建一个快捷方式,我的应用程序使用烤面包通知。 我试图删除快捷方式创建,但它不起作用。我理解,因为对于桌面应用程序,快捷方式是烤面包通知的先
我主要使用LibGDX为Android开发游戏。在桌面上进行测试是有帮助的。当我这样做时,我只是在Android Studio中设置“Desktop”项目来使用来自“Android”项目的资产,如这里所述。为了测试目的,这在我的本地机器上工作得很好。然而,如果我想打包我的游戏并发布给其他人在他们自己的机器上玩,这是行不通的。我如何包装我的游戏,以包括图形和音频资产?