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

Jar-File runs in console, but crahes when executed by batch-file

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

java -jar -Xms512 Excel_to_csv.jar

但是当我 运行 使用 .bat 文件时 运行s,但由于内存问题而崩溃:

java -jar -Xms512m Excel_to_csv.jar

我很感激任何想法。

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

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

取自(并修改)自https://msdn.microsoft.com/en-us/library/ms190730.aspx

修正参数的顺序:-jar 期望文件名作为参数,但你给了它 -Xms。并且说 "MB" 可能也是一个好主意:

java -Xms512m -jar Excel_to_csv.jar

当你说 512 时,我不确定默认值是多少,但我的猜测是 KiB(意思是 512 KiB 的 RAM),这甚至不足以启动该过程。

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

java -Xms512m -Xmx2000m -jar Excel_to_csv.jar

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