2011-08-22 59 views
9

我有一个Java富客户端桌面应用程序。我想在工作中分发一些电脑,但我从来没有做过这样的事情。在我的工作场所,人们并不是太过于电脑化,因为这是一份学生工作,我不会再呆在那里很长时间,如果我可以让我的程序易于运行,并且可以在人们加倍时运行,我就会喜欢它-点击它。如何通过双击单个文件来分发我的Java程序以使其可以运行?

我也不想手动安装JRE来运行它。基本上,我想知道的是如何通过双击轻松地使我的Java应用程序可以运行(即使它只在Windows上,也没关系)。我很确定我需要将正确的JRE版本打包,但我不知道这样做的正确方式。

我在某些网站上阅读过,你不应该把JRE与你的程序一起打包,因为它会让人们拥有多个不同的版本,其中一些版本已经过时,并且会导致安全问题,但这不是问题因为要运行我的应用程序的计算机没有连接到互联网,只能用于运行此程序。由于我的应用程序目前是一个Eclipse项目,因此我使用相对路径(例如:img/test.png)获取我的资源,如图标,图像,SQLite数据库(用于读取和写入)等等。

我将不得不改变任何这些路径,让他们即使在打包时也能继续工作吗?

+1

http://stackoverflow.com/questions/147181/how-can-i-convert-my-java-program-to-an-exe-file – 2011-08-22 01:31:44

+0

@Andrew Thompson是的,它确实 –

+1

另外考虑[标签: Java的Web启动。 – trashgod

回答

7

你在找什么是JAR文件。在eclipse中,制作Jar文件非常简单。具体来说,您需要右键单击您的项目,转至导出,然后选择“Runnable Jar”。请注意文件夹的路径。您可能需要在Jar文件旁边保留资源文件夹。您可能需要提供一些更具体的信息才能得到确切的答案。通常,资源文件夹与JAR文件位于同一位置(位于计算机的同一文件夹中)。

+0

我知道关于JAR文件,但我从来没有使用它们,它在JDeveloper IDE(我们在学校中使用的)中看起来很复杂。我会尝试你刚刚在Eclipse中提到的内容,看看它的工作情况。我仍然需要确保计算机上已经存在JRE,对吧? –

1

要使问题通过双击运行,您可以将其作为jar文件或批处理文件分发,以调用jar文件。
对于安装部分,您可以创建一个批处理文件来检查是否存在java,如果不存在,则调用安装程序。
编辑:
批处理代码:

IF DEFINED JAVA GOTO ok 
java-installer.exe 
GOTO end 
:ok 
your-application.jar 
:end 
+0

看起来不错,但不会只检查是否存在任何Java版本?假设安装的Java版本是1.3,并且我在我的开发环境中使用了1.6,是不是会导致问题? –

4

,便于更好的选择安装Java应用程序。使用GUI将使用Java Web Start启动它。对于用户来说,JWS是'一键式'安装选项,可以(安装&启动应用程序)然后添加桌面快捷方式和菜单项。 JWS的推出意味着您需要更多的工作,但对最终用户来说是一件轻而易举的事情。

要确保运行该应用程序的JRE存在,请使用deployJava.js(有关更多详细信息,请参阅JWS链接)。该脚本需要重新配置才能从本地网络获取JRE安装程序 - 默认情况下是从Oracle获取它。

大部分资源应该打包在jar文件中,并与应用程序一起提供,但对于DB,请使用JNLP ExtensionInstallerService调用DB安装程序。


..Java Web Start是一种链接(或者我可以使它成为桌面上的快捷方式),用户将点击它来安装JRE并在未安装JRE的情况下运行该程序,或者如果JRE运行该程序在计算机上出现。

它的工作方式是在本地Intranet上有一个网页。当用户访问该页面时,脚本会检查合适的JRE。

  • 如果存在,它会将链接写入启动文件。
  • 如果没有JRE,或者版本太低,它会引导用户安装它(只需按照提示单击'OK'即可)。然后它会将链接放到应用程序中。

我可以配置链接从我们网络上的服务器获取JRE。

这就是您需要重新配置脚本的部分。 AFAIR脚本公开了一个URL来查找JRE - 可以将其更改为指向Intranet上的某个位置。

..所以“网络”才刚刚在名称,计算机没有连接到互联网有这个工作,对不对?

是的。 JWS对于Java富客户端来说是一个很好的启动技术,但名字很少。

+0

我明白了,非常感谢这些信息,它一定会派上用场!为了确保我的理解正确,Java Web Start是一种链接(或者我可以将它作为桌面上的快捷方式),用户将单击以安装JRE并在未安装JRE的情况下运行该程序,或者如果计算机上存在JRE,则只需运行该程序。然后,我可以配置链接以从我们的网络上的服务器获取JRE。所以“网络”只是名义上的,电脑不需要连接到互联网来完成这项工作,对吧? –

+0

查看编辑。如果你发现这个信息。方便,随时提高我的答案。 ;) –

+0

顺便说一句 - 我连接到'ExtensionInstallerService'演示的页面。有很多*独立*的例子。他们带有所有的代码,以及一个应该很容易导入到Eclipse等主要IDE的构建文件。让他们去了解它是如何工作的,以及它可以为你和你的用户做些什么。 –

0

如果您发现实施上述方法非常困难。你可以继续这个简单的方法。

在某个位置创建文件夹库。将应用程序使用的所有罐子放入其中。如果你能够为你的应用程序创建一个jar文件,你可以很好地将你的application.jar放入lib文件夹中。在相同的位置创建一个批处理文件,该文件将包含您的主类的java命令。您的批次中的文本可能看起来类似的东西,以这样的:

set path="\lib\" 
java -cp %path% package1.package2.MainClass 

如果您有任何其他的依赖,为前:如果您在代码中使用的图像在IMG/icon.jpg。然后,你只需要将img文件夹移动到这个位置。

只需使用winrar压缩这些文件并跨越共享。在解压zip之后运行该批处理文件将启动您的java MainClass,而不管它放置在客户端系统中的位置。如果你无法为你的应用程序创建一个jar文件并将其放在lib文件夹中,只需将class文件夹复制到你的bin文件夹中并粘贴到该位置并相应地更改批处理文件即可查找bin文件夹中的类。

相关问题