我正在尝试从使用 Xcode 3.1.4 构建的 java .jar 可执行文件导出大型 PNG 图像。
基本代码如下:
filename = "myImage.png";
bImg = new BufferedImage(7882, 7882, BufferedImage.TYPE_INT_RGB);
Graphics2D cg = bImg.createGraphics();
this.repaint(0,0,7882, 7882);
this.paint(cg);
cg.dispose();
ImageIO.write(bImg, "png", new File(filename))l
但是,由于图像非常大,我得到:
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:41)
at java.awt.image.Raster.createPackedRaster(Raster.java:458)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1015)
at java.awt.image.BufferedImage.<init>(BufferedImage.java:315)
我知道我可以通过使用 -Xmx
标志(例如 -Xmx4g
)来增加堆大小,并且如果我像这样运行 .jar 文件,操作就会成功:
java -Xmx4g -jar myJar.jar
但是,我想分发该文件,以便人们只需双击 .jar 文件即可运行它。因此,我需要某种方法在我的 Xcode 项目中指定 -Xmx
标志,或者某种分阶段写入 PNG 图像的方法。
我尝试进入可执行文件->java->信息->参数并添加参数-Xmx4g
...这没有帮助。我也尝试过将其设置为名称为 -Xmx4g
的变量,但也没有帮助。
最佳答案
无法为可执行 JAR 本身指定 JVM 参数。
您有几种解决方法:
1) 将 .cmd 和 .sh 文件与 jar 一起发送,以使用所需参数启动 java
2) 使用像 WinRun4j 这样的打包器/包装器, Launch4j等等
3) 像以前一样运送 jar 。在 main() 中检查 JVM 参数,如果未使用所需的内存参数启动,请确定 jar 的路径并使用 Runtime.exec 启动一个带有所需内存参数的新 java jar 进程。
关于java - 将大型 PNG 图像导出到使用 Xcode 编译的 java 可执行文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007238/