java - 将大型 PNG 图像导出到使用 Xcode 编译的 java 可执行文件中

标签 java heap-memory

我正在尝试从使用 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/

相关文章:

java - 编辑器不包含主要类型

java - 在 Java 中不使用日历函数查找星期几

c++ - 为什么在堆栈上声明的数组的变量名不是指针 C++?

debugging - 在 GDB 中,如何找出谁在堆上分配了地址?

c - 给定一个指针,找到它所在的堆 block

c - 通过读取输出了解 C 中的 malloc()、realloc() 和 free()

java - 如何使用 jaxb2-maven-plugin 将 java 类生成到源文件夹中?

java - OpenLiberty 18.0.0.2 是否附带 Derby DB 或 H2 等嵌入式数据库?

java - 如何序列化引用泛型类型的不可序列化对象的对象?

java - 如何为不同的eclipse实例分配不同的堆大小?