2012-09-11 30 views
0

我正在製作一個項目,用於通過網絡上的任何其他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

您在客戶端上顯示圖像的方式對我來說似乎並不合適。編寫自定義的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方法。該面板當然先前已經實例化並添加到容器中。

+0

我試過你的解決方案。但第一張圖像顯示一段時間後出現空白屏幕。 – Vijay

+0

請檢查您是否設置真實圖像。 –

+0

正如我在我的代碼顯示服務器打印「成功」 – Vijay