imageIO.read invoke 错误

本文解决了imageIO.read()处理超大图片时出现的InvocationTargetException异常问题,通过调整JVM内存配置来应对内存不足的情况,提供了Eclipse结合Tomcat及Tomcat独立启动时的内存设置方法。

imageIO.read() 超大图片上传出现的问题(异常:InvocationTargetException)。

 

这个问题是内存太低导致

设置内存前内存情况:

JVM MAX MEMORY: 64M

JVM IS USING MEMORY:64M

 

 

设置内存后内存情况:

JVM MAX MEMORY: 508M

JVM IS USING MEMORY:508M

 

另:

eclipse 结合tomcat 内存设置和tomcat 独立启动内存设置

1:

Eclipse->Window->Preferences->Server->Runtime Environments->选中Apache Tomcat v5.0->点击Edit按钮->在弹出对话框里点击JRE后面的Installed JREs按钮->在弹出对话框中选中tomcat使用的那个JRE->点击Edit按钮

 

->在弹出对话框中,找到Default VM Arguments,并在输入框中输入:-Xms512M -Xmx512M

 

 

2:

在tomcat/bin 下找到 catalina.bat 文件打开,再找到  set JAVA_OPTS = -Xms512M -Xmx512M

 

 

 

关于堆内存分配:

JVM初始分配的内存由-Xms指定,默认是物理内存的1/64;JVM最 大分配的内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时, JVM会减少堆直到

 

-Xms的最小限制。因此服务器一般设置-Xms、-Xmx相等以避免在每次GC 后调整堆的大小。

原始代码报错 javax.imageio.IIOException: Invalid argument to native writeImage 异常详细信息: [com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method), com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:1067), com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:363), javax.imageio.ImageWriter.write(ImageWriter.java:615), javax.imageio.ImageIO.doWrite(ImageIO.java:1622), javax.imageio.ImageIO.write(ImageIO.java:1506), cn.com.bdo.invoice.utils.PdfToImgUtil.compressImage(PdfToImgUtil.java:355), cn.com.bdo.invoice.service.impl.InputInvoiceServiceImpl.invoiceOcrIdentifyPC(InputInvoiceServiceImpl.java:908), cn.com.bdo.invoice.service.impl.InputInvoiceServiceImpl$$FastClassBySpringCGLIB$$9237dd8f.invoke(<generated>), org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218), org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163), org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749), cn.com.bdo.biz.log.starter.support.aop.LogRecordInterceptor.execute(LogRecordInterceptor.java:95), cn.com.bdo.biz.log.starter.support.aop.LogRecordInterceptor.invoke(LogRecordInterceptor.java:68), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186), org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749), org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88), cn.com.bdo.invoice.aspect.BizLogAspect.around(BizLogAspect.java:60), sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method), sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62), sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodA
08-13
public void start(Stage primaryStage) throws Exception { String CONNECTION_URL = "jdbc:hive2://192.168.88.100:10000/default"; String USERNAME = "root"; String PASSWORD = "123456"; String JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver"; // 加载 Hive JDBC 驱动 Class.forName(JDBC_DRIVER); // 建立 JDBC 连接 Connection conn = DriverManager.getConnection(CONNECTION_URL, USERNAME, PASSWORD); // 创建 Statement 对象 Statement stmt = conn.createStatement(); // 执行查询语句 String sql = "SELECT data FROM picture_01 WHERE dt = '2023-07-13'"; ResultSet rs = stmt.executeQuery(sql); // 处理查询结果 while (rs.next()) { // 处理数据,例如打印输出 System.out.println(rs.getBinaryStream("data")); } // 从 Hive 数据库获取二进制数据的输入流对象 InputStream inputStream = rs.getBinaryStream("data"); // 将输入流对象转换为 BufferedImage 对象 BufferedImage bufferedImage = ImageIO.read(inputStream); // 转换 BufferedImage 为 JavaFX 的 Image 对象 Image image = SwingFXUtils.toFXImage(bufferedImage, null); System.out.println("1"); // 创建图像视图 ImageView imageView = new ImageView(image); // 创建场景,并将图像视图添加到场景中 Scene scene = new Scene(imageView.getParent()); // 设置舞台并显示场景 primaryStage.setTitle("Image Viewer"); primaryStage.setScene(scene); primaryStage.show(); // 关闭连接和释放资源 rs.close(); stmt.close(); conn.close(); // 关闭输入流 inputStream.close(); } }此代码报错上述代码报错java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)什么原因
07-17
ava.lang.Error: Invalid memory access at com.sun.jna.Native.invokePointer(Native Method) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.jna.Function.invokePointer(Function.java:470) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.jna.Function.invoke(Function.java:404) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.jna.Function.invoke(Function.java:315) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.jna.Library$Handler.invoke(Library.java:212) ~[jna-4.1.0.jar:4.1.0 (b4)] at com.sun.proxy.$Proxy32.TessBaseAPIGetUTF8Text(Unknown Source) ~[?:?] at net.sourceforge.tess4j.Tesseract.getOCRText(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.Tesseract.doOCR(Unknown Source) ~[tess4j-3.4.8.jar:?] at net.sourceforge.tess4j.ITesseract$doOCR$0.call(Unknown Source) ~[?:?] at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47) ~[groovy-3.0.20.jar:3.0.20] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125) ~[groovy-3.0.20.jar:3.0.20] at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:139) ~[groovy-3.0.20.jar:3.0.20] at Script14.run(Script14.groovy:8) ~[?:?] at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:317) ~[groovy-jsr223-3.0.20.jar:3.0.20] at org.codehaus.groovy.jsr223.GroovyCompiledScript.eval(GroovyCompiledScript.java:71) ~[groovy-jsr223-3.0.20.jar:3.0.20] at java.scripting/javax.script.CompiledScript.eval(CompiledScript.java:89) ~[java.scripting:?] at org.apache.jmeter.util.JSR223TestElement.processFileOrScript(JSR223TestElement.java:230) ~[ApacheJMeter_core.jar:5.6.3] at org.apache.jmeter.extractor.JSR223PostProcessor.process(JSR223PostProcessor.java:45) ~[ApacheJMeter_components.jar:5.6.3] at org.apache.jmeter.threads.JMeterThread.runPostProcessors(JMeterThread.java:973) ~[ApacheJMeter_core.jar:5.6.3] at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:585) ~[ApacheJMeter_core.jar:5.6.3] at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:501) ~[ApacheJMeter_core.jar:5.6.3] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:268) ~[ApacheJMeter_core.jar:5.6.3] at java.base/java.lang.Thread.run(Thread.java:834) [?:?]
最新发布
10-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值