【发布时间】:2014-08-05 05:01:34
【问题描述】:
此代码在 BufferedImage 对象中加载图像。 ImageIO.read() 可以将 InputStream 作为参数。
我首先尝试从套接字获取 InputStream 并加载。然后我尝试将图像加载到一个字节数组中并将这个数组作为参数(我认为问题出在连接上)。
当我通过 Eclipse 运行我的程序时,这两种方法都可以正常工作,而当我将项目保存为可运行的 jar 文件时,这两种方法都不起作用。代码卡在最后一行。
byte[] buffer = new byte[imageBufferSize];
int count = 0;
while ((count = in.read(buffer)) != -1) {
//nothing here. Just reading in buffer in while cycle.
}
String bytesStr = new String(buffer);
int skipPos = bytesStr.indexOf("‰PNG");
byte[] newBytes = Arrays.copyOfRange(buffer, skipPos, buffer.length);
bufImg = ImageIO.read(new ByteArrayInputStream(newBytes));
【问题讨论】:
-
您是否尝试过将其放在 try catch 子句中 - 如果是,有什么例外?
-
另外,你是如何创建 jar 文件的
-
我试过了。没有发现任何异常。但它并没有像我之前所说的那样卡住。它进入try-catch的finally块。关于创建 - 我只是将它导出为 Eclipse 中的 Runnable jar 文件,它总是可以正常构建。我还检查了 .jar 文件。我使用的所有库都在那里。
-
finally 子句中的 bufImg 是否为空?
-
您的缓冲区读取 while 循环是假的。如果您碰巧一口气读取了
imageBufferSize字节,它只会(偶然)起作用。使用read(byte[], int, int)方法,设置起始偏移为0,为while循环的每次迭代加上count。
标签: java eclipse blocking javax.imageio