当前位置 主页 > 服务器问题 > Linux/apache问题 >
这样就可以实现图像通过ObjectInputStream和ObjectOutputStream的串行化传播了
了解了以上基础之后首先我们要完成控制端的UI界面设置,图片接收,和键盘鼠标动作监听:
首先是设置接收图片:
public static void reveivePic() throws ClassNotFoundException, IOException{ Message g = (Message)OIS.readObject(); FileOutputStream FOS = new FileOutputStream("D:\\OUT\\"+g.getFileName()); FOS.write(g.getFileContent(),0,(int)g.getFileLength()); FOS.flush(); FileInputStream FIS= new FileInputStream("D:\\OUT\\"+g.getFileName()); BufferedImage BI = ImageIO.read(FIS); IIC=new ImageIcon(BI); Image img = IIC.getImage(); Toolkit tk = Toolkit.getDefaultToolkit() ; Dimension d =tk.getScreenSize(); int w = d.width; int h =d.height; BufferedImage bi = resize(img,800,600); imag_lab.setIcon(new ImageIcon(bi)); imag_lab.repaint();//销掉以前画的背景 } private static BufferedImage resize(Image img, int newW, int newH) { int w = img.getWidth(null); int h = img.getHeight(null); BufferedImage dimg = new BufferedImage(newW, newH,BufferedImage.TYPE_INT_BGR); Graphics2D g = dimg.createGraphics(); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null); g.dispose(); return dimg; }
这样接收了来自ObjectInputStream的Message类之后就可以把图片重新设置到面板pane的大小然后展示出来
下一步就是设置面板属性和监听器:
public static void showUI(){ //控制台标题 JFrame jf = new JFrame("控制台");setListener(jf); //控制台大小 jf.setSize(500, 400); //imag_lab用于存放画面 imag_lab = new JLabel(); jf.add(imag_lab); //设置控制台可见 jf.setVisible(true); //控制台置顶 jf.setAlwaysOnTop(true); jf.setResizable(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
监听器:
public static void setListener( JFrame frame){ //panel设置监听器 frame.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e) { sendEventObject(e); } @Override public void keyReleased(KeyEvent e) { sendEventObject(e); } @Override public void keyTyped(KeyEvent e) { } }); frame.addMouseWheelListener(new MouseWheelListener(){ public void mouseWheelMoved(MouseWheelEvent e) { sendEventObject(e); } }); frame.addMouseMotionListener(new MouseMotionListener(){ public void mouseDragged(MouseEvent e) { sendEventObject(e); } public void mouseMoved(MouseEvent e) { sendEventObject(e); } }); frame.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent e) { sendEventObject(e); } public void mouseEntered(MouseEvent e) { sendEventObject(e); } public void mouseExited(MouseEvent e) { sendEventObject(e); } public void mousePressed(MouseEvent e) { sendEventObject(e); } public void mouseReleased(MouseEvent e) { sendEventObject(e); } }); } private static void sendEventObject(InputEvent event){ try{ System.out.println("send"); OOS.writeObject(event); OOS.flush(); }catch(Exception ef){ ef.printStackTrace(); }