我可以强制我的java程序使用jdk而不是jre专门执行吗?

时间:2016-12-11 13:54:49

标签: java

我一直在寻找答案,但没有太多运气。

我一直在研究使用javax.util.JavaCompiler类的java游戏。我发现这对JRE不起作用,因为当我调用编译器运行方法时,我会得到一个Null Pointer异常(我假设他们根本就没有发送一个完全可以理解的JRE编译器)。

我现在的问题是我的游戏本身依赖于JDK。是否有可能强制我的游戏以某种方式搜索系统环境变量,而是使用jdk执行自己?

我尝试使用一个单独的启动器,然后搜索jdk并通过它执行游戏,但这感觉很乱,我担心可能会有因素我不知道。

5 个答案:

答案 0 :(得分:0)

这在技术上是可行的,但它会使你的应用程序开始慢慢进行详尽的搜索。 AFAIK,没有支持的方法来做到这一点。

用户可以选择运行Java应用程序的方式。做一些聪明的事情,比如搜索JDK安装是有潜在危险的。 (您最终可能会选择一个用户不知道的旧的不安全的JDK,或者他们忘记卸载。这可能会使用户面临安全漏洞等等。)

我建议向用户说明他们需要安装和/或使用JDK的友好消息。

答案 1 :(得分:0)

您有以下选择:

  1. 在启动应用程序期间检查该类是否存在;如果没有找到,则为您的用户提供一个明确的错误消息,他需要使用JDK运行(您还会在人们下载您的应用程序的网站上以某种方式指定为" prerequesites")。
  2. 退一步仔细分析您的解决方案所依赖的类别。然后你要么重新打包那些类;或者您可以只使用您的应用程序发送相应的JAR文件。
  3. 您看,要求您的用户安装JDK对他们来说是一个负担。即使你在谈论一些"跨公司"人们必须使用它的产品......很少有人愿意安装JDK。而且你绝对不应该期望许多用户安装了JDK。

    另一方面,当你考虑重新包装那些东西时;你还必须研究法律方面;您不想通过向客户分发JDK相关JAR来违反任何许可规则。

答案 2 :(得分:0)

您可以简单地为NPE使用编译器API的try / catch块,并在出现错误时,以不确定的条件通知用户。

或者,您可以使用asm或其他代码生成器包来避免编译器的需要。

答案 3 :(得分:0)

我找到了问题的解决方案。感谢所有说我应该用编译器打包游戏的人。我找到了this帖子,作者在其中描述了使用eclipse编译器。显然javax.tools.JavaCompiler只是一个提供的通用接口,我真的应该更详细地学习API。

答案 4 :(得分:-1)

您不需要使用JDK运行您的应用。您仍然可以使用JRE运行它。您需要做的就是确保包含应用程序所需类的jar(来自JDK或其他任何地方)在您的类路径中。您可以通过在安装中包含所需的JAR或在运行应用程序时在classpath参数(-cp)中包含所需jar的路径来实现它。如果您希望您的应用程序在仅安装了JRE的计算机上运行,​​则必须在您的安装中包含所需的JAR。将其视为您使用的任何其他第三方库,因此您必须将这些库JAR打包到您的应用程序中JAR / WAR