我正在制作一个从网络上的任何其他PC控制PC的项目。 但是当我将图像从服务器发送到客户端时,它不会改变,只显示第一个图像。 所以我使用GZIP压缩将捕获的服务器映像发送到客户端。
这是服务器代码:
out = new DataOutputStream(s.getOutputStream());
zipout = new GZIPOutputStream(out);
while(true)
{
img = conn.getScreenImg(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
//Here conn is a Object of Robot Class
ImageIO.write(img, "jpeg", zipout);
Thread.sleep(200);
System.out.println("Success");
}
客户端代码:显示服务器发送的图像。
while(true)
{
try
{
img = ImageIO.read(zipin);
Graphics g = this.getGraphics();
g.drawImage(img, 0, 0, this);
Thread.sleep(100);
}
catch (Exception e)
{
e.printStackTrace();
}
}
我需要帮助。客户端上的图像不会更改。 我想知道如果在这里使用GZIP压缩图像以通过网络发送是好的,它会加速这个过程。或者我应该使用其他方法。
答案 0 :(得分:0)
您在客户端上显示图像的方式对我来说似乎不对。编写一个自定义JPanel
来覆盖paintComponent
方法并处理图像渲染会更好。如下所示:
class ImagePanel extends JPanel {
private BufferedImage image = null;
private void setImage(BufferedImage img) {
image = img;
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
if (image != null) {
g2.drawImage(image, 0, 0, null);
}
}
}
在while
循环中,您可以在面板上调用setImage
方法。该小组当然先前已实例化并添加到容器中。