2016-12-07 21 views
0

我正嘗試從使用Xcode 3.1.4構建的java .jar可執行文件中導出大型PNG圖像。在用Xcode編譯的java可執行文件中導出大型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圖像。

我試過進入Executables-> java-> Info-> Argument並添加參數-Xmx4g ...它沒有幫助。我試過將它設置爲一個變量,名稱爲-Xmx4g,也沒有幫助。

回答

1

無法爲可執行JAR本身指定JVM參數。

你有幾種方法來解決辦法:

1)船舶。加利福尼亞和.SH文件用罐子來啓動Java與所需的參數

2)使用打包/包裝像WinRun4jLaunch4j等沿on

3)運輸瓶如前。在main()中檢查JVM參數,如果沒有用期望的內存參數啓動,請確定你的jar的路徑並用Runtime.exec啓動一個新的具有所需內存參數的java jar進程。

+0

好吧,這些聽起來都不是特別美學......但我想我會去#2 – WhiteTiger

+0

我認爲這是最好的路徑,如果你能負擔得起調查和維護的時間。我們使用WinRun4j將自己的Windows產品包裝在自動構建中,並且非常滿意。儘管如此,花費一些時間來弄清楚配置和各個角落。 –

相關問題