java.io.IOException: reading encoded JPEG Stream

thunk123 2008-09-26 02:43:45

//代码1:
import java.awt.AWTException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.Dimension;
/*
* 产生图象
*/
public class ImageProvider {

private Dimension screenSize;
private Robot robot=null;//图象采集类
private Rectangle rect=null;//要复制的 屏幕区域
/*
*
*/
/*
* 构造函数,输入要采集的屏幕的 矩形信息
*/
public ImageProvider() throws AWTException{
screenSize = Toolkit.getDefaultToolkit().getScreenSize();

rect=new Rectangle(0, 0, (int) screenSize.getWidth(),
(int) screenSize.getHeight());//可以指定捕获屏幕区域
robot=new Robot();//创建Robot对象
}
/*
* 复制全屏幕,返回BufferedImage对象
*/
public BufferedImage CopyScreen(){

return robot.createScreenCapture(rect);//

}


}

//代码2:

import java.awt.AWTException;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class SendImageThread extends Thread{

ImageProvider impv=null;
Socket client=null;
int PORT;

BufferedImage image=null;
ObjectOutputStream send=null;
SendImageThread(InetAddress server_ip,int port) throws IOException, AWTException{

client=new Socket(server_ip,port); //建立套接并初始化 图象发送流
client.setSendBufferSize(1024);//设置发送缓冲
impv=new ImageProvider();

}
public void run(){

int i=0;
OutputStream out=null;
JPEGImageEncoder encoder=null;//压缩为JEPG

try {
out = client.getOutputStream();
encoder = JPEGCodec.createJPEGEncoder (out) ;
} catch (IOException e1) {

e1.printStackTrace();
}
while(true){
image=impv.CopyScreen();//此处是获取BufferedImage对象
try{

encoder.encode(image); //提示的这个地方出错

Thread.sleep(Parameter.IMAGE_get_time);
}catch(IOException e){
i++;
tools.print("无法写入对象~"+i);
e.printStackTrace();
if(i==10)break;
}
catch(InterruptedException sd){
tools.print("INTERRUPTED~");
}
}
}
}

只要程序不断获发送JPG流,可能在一分多钟就会抛出异常,实在搞不懂错在哪?

java.io.IOException: reading encoded JPEG Stream
at sun.awt.image.codec.JPEGImageEncoderImpl.writeJPEGStream(Native Method)
at sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.java:472)
at sun.awt.image.codec.JPEGImageEncoderImpl.encode(JPEGImageEncoderImpl.java:228)
at SendImageThread.run(SendImageThread.java:47)


...全文
682 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaerfeng 2012-11-02
  • 打赏
  • 举报
回复
不要用sun的包,最好用jdk自带的。sun的包既然没有出现在jdk里面很可能就是因为本身就是其内部测试使用的。把你encoder.encode(image); 这句话去掉。改用JDK自带的ImageIO输出。
as1t43110 2012-03-17
  • 打赏
  • 举报
回复
我也遇到了这个问题,验证码页面狂刷的话会报错。
fangsp 2008-09-27
  • 打赏
  • 举报
回复
学习中
先帮楼主顶一个
期待高手的到来
jiaping108 2008-09-27
  • 打赏
  • 举报
回复
看到LZ揭贴率后,过滤~
thunk123 2008-09-27
  • 打赏
  • 举报
回复
上去
Sniper_Killer 2008-09-27
  • 打赏
  • 举报
回复
是不是緩沖區的問題?
thunk123 2008-09-27
  • 打赏
  • 举报
回复
等待高手中!!
thunk123 2008-09-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liang8305 的回复:]
reading encoded JPEG Stream

你是要压缩为JPEG,而encoder.encode(image);的时候image已经是JPEG格式的了

至于为什么,你给的代码段太短了,自己查查吧

或者encoder.encode(image);前判断下,是JPG了就不转了
[/Quote]

我给的代码已经是个独立模块了!!
我参考了很多类似的做法都使用这种做法,你的“image已经是JPEG格式的了
”说法,我不同意,因为编码成JPGe之前都是位图!!!
liang8305 2008-09-27
  • 打赏
  • 举报
回复
reading encoded JPEG Stream

你是要压缩为JPEG,而encoder.encode(image);的时候image已经是JPEG格式的了

至于为什么,你给的代码段太短了,自己查查吧

或者encoder.encode(image);前判断下,是JPG了就不转了
thunk123 2008-09-26
  • 打赏
  • 举报
回复
上去
liaoyi_ipanel 2008-09-26
  • 打赏
  • 举报
回复
up

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧