Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用runtime.getRuntime().exec()时Jar文件是如何工作的_Java_Jar_Runtime_Exec_Runtime.exec - Fatal编程技术网

Java 使用runtime.getRuntime().exec()时Jar文件是如何工作的

Java 使用runtime.getRuntime().exec()时Jar文件是如何工作的,java,jar,runtime,exec,runtime.exec,Java,Jar,Runtime,Exec,Runtime.exec,我试图创建一个jar文件,只需点击一下就可以执行我的游戏。我的游戏超出了java默认分配的堆内存,因此我必须使用-Xmx1000m运行代码。我一直在网上进行研究,不幸的是,似乎没有办法告诉jar文件使用比默认内存更多的内存来娱乐我的代码。相反,我创建了另一个类,该类将使用runtime从另一个主方法中编译代码,并使用以下内容创建了一个jar文件: import java.io.*; public class RuntimeExec{ public static void main(String[

我试图创建一个jar文件,只需点击一下就可以执行我的游戏。我的游戏超出了java默认分配的堆内存,因此我必须使用-Xmx1000m运行代码。我一直在网上进行研究,不幸的是,似乎没有办法告诉jar文件使用比默认内存更多的内存来娱乐我的代码。相反,我创建了另一个类,该类将使用runtime从另一个主方法中编译代码,并使用以下内容创建了一个jar文件:

import java.io.*;
public class RuntimeExec{
public static void main(String[] args){
    try
    {
    Process process = Runtime.getRuntime().exec("java -Xmx1000m Controller");
    process.waitFor();
    int exitCode = process.exitValue();
    if(exitCode == 0) { /* success*/ }
    else { /*failed*/ }
    }
    catch (Exception e)
    {e.printStackTrace();}
}

}

但我认为这是可行的,因为它运行的是文件夹中现有的类,而不是存储在jar中的类。有没有一种方法可以让jar在中运行一个类,或者将两个不同的jar组合起来,这样我就可以绕过内存堆问题了?

有很多方法可以做到这一点:

  • 正如您所提到的,通过使用另一个Jar文件来触发您的游戏文件
  • 正如@Perception提到的,有一个批处理文件可以启动游戏。但是要小心,如果从say-Net下载,用户必须设置脚本可运行的权限
  • 构建一个安装程序。在Mac上,使用Oracle for Java 7,Apple App bundler for Java 6构建
    .App
    文件。您仍然无法重新分发它,因为无法设置必要的权限。为应用程序文件构建dmg。这可以用于分发。 类似的Windows安装程序

  • 第三种技术是最好的,因为您可以很好地打包依赖项,设置所有JVM参数等。为用户提供简单安装的整个解决方案是部署应用程序。使用。它可以为应用程序设置RAM,还可以安装桌面快捷方式来启动它。JWS比对
    exec
    的调用(实现差)更健壮


    但是,如果JWS由于某些原因不适合此应用程序,请参阅导致Jar内存不足的黑客攻击(类似于上面使用
    exec
    的方式,但在使用
    ProcessBuilder
    重新启动内存不足的应用程序时稍微稳健一些)


    组织桌面快捷方式以允许用户单击即可启动,这是留给读者的一个练习。

    为什么不使用批处理文件来启动应用程序?重新阅读问题后,我意识到这是重复的。