我一直在寻找答案,但没有太多运气。
我一直在研究使用javax.util.JavaCompiler类的java游戏。我发现这对JRE不起作用,因为当我调用编译器运行方法时,我会得到一个Null Pointer异常(我假设他们根本就没有发送一个完全可以理解的JRE编译器)。
我现在的问题是我的游戏本身依赖于JDK。是否有可能强制我的游戏以某种方式搜索系统环境变量,而是使用jdk执行自己?
我尝试使用一个单独的启动器,然后搜索jdk并通过它执行游戏,但这感觉很乱,我担心可能会有因素我不知道。
答案 0 :(得分:0)
这在技术上是可行的,但它会使你的应用程序开始慢慢进行详尽的搜索。 AFAIK,没有支持的方法来做到这一点。
用户可以选择运行Java应用程序的方式。做一些聪明的事情,比如搜索JDK安装是有潜在危险的。 (您最终可能会选择一个用户不知道的旧的不安全的JDK,或者他们忘记卸载。这可能会使用户面临安全漏洞等等。)
我建议向用户说明他们需要安装和/或使用JDK的友好消息。
答案 1 :(得分:0)
您有以下选择:
您看,要求您的用户安装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