返回信息流大家好,我java不好(说实话,软硬件都不太好),但近期做关于毕设方面的东西,我从客户端可以接受到图片流,但却不能显示出来(播放),只显示最后一张,听别人说是缓存问题,但还不知如何解决,恳请大家帮忙!代码如下:
客户端:package paper;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.ObjectInputStream;
import java.net.Socket;
import javax.imageio.ImageIO;
import javax.net.ssl.SSLSocketFactory;
import javax.swing.JFrame;
import javax.swing.JPanel;
class J_Panel extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
BufferedImage CaptureScreen0;
String ServerIp;
int ServerPort;
String m;//来自主叫方的消息
public J_Panel()
{
}
protected void paintComponent(Graphics g){
int i=0;
try{
Socket s=new Socket("118.229.227.97",5000);//localhost
ObjectInputStream dataIn=new ObjectInputStream(s.getInputStream());
s.setSoTimeout(5000);
while(true){
Thread.sleep(100); //图像采集时间间隔
BufferedImage CaptureScreen=ImageIO.read(dataIn);
else
{
System.out.println("has new picture input!");
File f=new File("CaptureScreen_From_Cliet.png");
ImageIO.write(CaptureScreen, "png",f);//保存图片
g.drawImage(CaptureScreen,0, 0,1366,768,this);//显示图像
}
}
}
catch(Exception e){
System.err.println("发生异常:"+e);
e.printStackTrace();
}
}
}
public class J_Client extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
public J_Client(){
super("桌面扑捉显示");
Container c=getContentPane();
c.add(new J_Panel(),BorderLayout.CENTER);
pack();//自适应框架大小
}
public static void main (String args[]){
try
{
J_Client app=new J_Client();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(new Dimension());
app.setVisible(true);
}
catch(Exception e){
System.err.println("发生异常:"+e);
e.printStackTrace();
}
}
}
服务器端:
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.imageio.ImageIO;
public class J_Server{
public static void main(String args[]){
try
{
int i=0;
ServerSocket server=new ServerSocket(5000);
Socket s=server.accept();
System.out.println("服务器端:接受来自客户端的连接");
s.setSoTimeout(5000);//设置连接超时时间
ObjectOutputStream dataout=new ObjectOutputStream(s.getOutputStream());
BufferedImage image=null;
do{
if(dataout!=null) System.out.println("connection");
Rectangle rect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());//全屏区域
Robot robot=new Robot();
robot.setAutoDelay(100);
BufferedImage CaptureScreen = robot.createScreenCapture(rect);
if(image==CaptureScreen){
System.out.println("no new picture input");
}
else
{ i++;
System.out.println("has new picture input!");
ImageIO.write(CaptureScreen, "png", dataout);
System.out.println("ROBOT的自动延迟时间是:"+robot.getAutoDelay());
File f=new File("CaptureScreen_from_server.png");
ImageIO.write(CaptureScreen, "png",f);//保存图片
System.out.println("CaptureScreen.getSources:"+CaptureScreen.getSource());
CaptureScreen.flush();
System.out.println("缓冲区大小:"+CaptureScreen.getData());
Thread.sleep(100); //图像采集时间间隔
System.out.println("i:"+i);
image=CaptureScreen;
}
}while(true);
// Thread.sleep(100); //图像采集时间间隔
//dataout.writeUTF("获取图片是否成功?");
//dataout.close();
//s.close();
}
catch(Exception e){
System.err.println("发生异常:"+e);
e.printStackTrace();
}
}
}
这是一条镜像帖。来源:北邮人论坛 / java / #20758同步于 2011/11/13
Java机器人发帖
java 求助--如何存储从socket接受到的图片流并播放
zg2000
2011/11/13镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。