Java Jar文件在控制台中运行,但在批处理文件执行时会崩溃

Java Jar文件在控制台中运行,但在批处理文件执行时会崩溃,java,eclipse,batch-file,jar,Java,Eclipse,Batch File,Jar,我的程序使用了大量内存,因为它必须读取巨大的.xls文件。 所以我在Eclipse中添加了参数-Xms512,这对我来说很好。 当我从命令行运行导出的jar文件时,其工作原理相同: java -jar -Xms512 Excel_to_csv.jar 但当我使用.bat文件运行它时,它会运行,但由于内存问题而崩溃: java -jar -Xms512m Excel_to_csv.jar 我很感激任何想法。我有一个想法,但我不确定。要使用Xms参数,运行该命令的用户必须具有在内存中锁定页面的权

我的程序使用了大量内存,因为它必须读取巨大的.xls文件。 所以我在Eclipse中添加了参数-Xms512,这对我来说很好。 当我从命令行运行导出的jar文件时,其工作原理相同:

java -jar -Xms512 Excel_to_csv.jar
但当我使用.bat文件运行它时,它会运行,但由于内存问题而崩溃:

java -jar -Xms512m Excel_to_csv.jar

我很感激任何想法。

我有一个想法,但我不确定。要使用Xms参数,运行该命令的用户必须具有在内存中锁定页面的权限。通常,此权限授予您的用户帐户。当您在命令行中运行该命令时,它将在您的用户帐户下运行,并且一切正常。当您将命令打包到批处理文件并启动它时,它将在帐户系统下运行。现在有可能该帐户没有此权限,但不确定这一点。要解决此问题,请执行以下操作:

在“开始”菜单上,单击“运行”。在“打开”框中,键入gpedit.msc。 在本地组策略编辑器控制台上,展开计算机配置,然后展开Windows设置。 展开安全设置,然后展开本地策略。 选择用户权限分配文件夹。策略将显示在详细信息窗格中 在窗格中,双击“锁定内存中的页面”。 在“本地安全设置–在内存中锁定页面”对话框中,单击“添加用户或组”。 在“选择用户、服务帐户或组”对话框中,添加帐户系统。 注销,然后重新登录以使此更改生效。
取自并修改自

修复参数顺序:-jar希望文件名作为参数,但您给它-Xms。说MB可能也是个好主意:

java -Xms512m -jar Excel_to_csv.jar
我不确定当你只说512时默认值是多少,但我猜应该是KiB,意思是512kib的内存,这甚至不足以启动进程

也就是说,ms只是设置Java获得的开始内存量。如果处理复杂的Excel,可能需要更多内存。试一试

java -Xms512m -Xmx2000m -jar Excel_to_csv.jar

允许Java在必要时分配多达2000个MiB。

这很奇怪。你试过以管理员的身份启动你的bat吗?不幸的是,我的公司不允许这样做。所以我不能用我最喜欢的解决方案Launch4j来测试它。好吧,但你知道自己的资历。尝试按住SHIFT键并右键单击文件,选择“以其他用户身份运行”,然后输入您的帐户数据。告诉我这是否有效。不幸的是,我不能这样做,因为我没有运行gpedit.msc的权限,但它可能会帮助其他人;你试过我的评论吗?好的,但你知道自己的资历。尝试按住SHIFT键并右键单击文件,选择“以其他用户身份运行”并输入您的帐户数据。我没有选择“以其他用户身份运行”,我可以以管理员身份运行并选择“以其他用户身份运行”,但它再次显示您没有权限。奇怪。当我按住SHIFT键并右键单击一个文件时,我得到以下信息:。你确定按了SHIFT键吗?对不起,我发现它现在无法更改我的评论…但我不工作。我现在找到了一个解决方案:当我使用.cmd而不是.bat时,它会神奇地工作。但是我会进一步调查,因为这不可能。你的东西在命令行中和我的一样好。我认为顺序在这里并不重要,但它对bat文件没有帮助。我已经尝试了所有的变体。使用jconsole连接到正在运行的进程并检查内存设置它们是否符合您的预期?另外,还要观察进程需要多少内存。