当前位置 主页 > 服务器问题 > Linux/apache问题 >

    Java实现远程控制技术完整源代码分享(2)

    栏目:Linux/apache问题 时间:2019-10-09 17:12

    这样就可以实现图像通过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();
      }