2013-03-06 2 views
0

У меня есть следующий код:java.awt.Robot не работает, как ожидалось

autoPlay = new Robot(); 
autoPlay.setAutoDelay(500); 
autoPlay.mouseMove((game.getLocationOnScreen().x + 1), (game.getLocationOnScreen().y + 1)); 
autoPlay.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
autoPlay.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 
autoPlay.mouseMove((game.getLocationOnScreen().x + 381), (game.getLocationOnScreen().y + 1)); 
autoPlay.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
autoPlay.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 
autoPlay.mouseMove((game.getLocationOnScreen().x + 1), (game.getLocationOnScreen().y + 381)); 
autoPlay.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
autoPlay.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 
autoPlay.mouseMove((game.getLocationOnScreen().x + 381), (game.getLocationOnScreen().y + 381)); 
autoPlay.mousePress(InputEvent.BUTTON1_DOWN_MASK); 
autoPlay.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); 
autoPlay.mouseMove(currentX, currentY); 

Согласно кодексу, робот должен переместиться в левый верхний угол JPanel, что я назвал game. Затем он должен нажать и отпустить левую кнопку мыши. Затем он должен перейти в верхний правый угол и нажать/отпустить левую кнопку мыши. Затем он должен перейти в левый нижний угол и нажать/отпустить левую кнопку мыши. Затем он должен перейти в нижний правый угол и нажать/отпустить правую кнопку мыши. Наконец, он должен вернуться в верхний левый угол.

Однако, что происходит, робот перемещается в угол, но не нажимает. Он только щелкает один раз, когда он возвращается в верхний левый угол в конце кода. Мне интересно, является ли мой JDK/SDK источником проблемы или я не понимаю класс Robot.

+0

Попробуйте с помощью 'MouseEvent.BUTTON1 'вместо' InputEvent.BUTTON1_DOWN_MASK' – MadProgrammer

+0

Исключение в потоке «AWT-EventQueue-0» java.lang.IllegalArgumentException: Неверная комбинация флажков кнопок – Zwischenzug

+1

Я проверил свой ActionListener. 'if (e.getButton() == MouseEvent.BUTTON1) {' не работает? – Zwischenzug

ответ

2

Кажется, все отлично работает для меня, может быть, это ваши слушатели мыши?

Обновленный

Протестировано под Java 6 & Java 7, изменил BUTTON1_DOWN_MASK к BUTTON1_MASK, как Java 6, похоже, не нравится ... Пойди разберись

import java.awt.AWTException; 
import java.awt.BorderLayout; 
import java.awt.Component; 
import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.GridBagLayout; 
import java.awt.Point; 
import java.awt.Robot; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.InputEvent; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestRobot02 { 

    public static void main(String[] args) { 
     new TestRobot02(); 
    } 

    public TestRobot02() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception ex) { 
       } 

       TestRobot02.TestPane testPane = new TestRobot02.TestPane(); 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(testPane); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 

       new Thread(new TestRobot02.RobotThread(testPane)).start(); 

      } 
     }); 
    } 

    public class RobotThread implements Runnable { 

     private TestPane component; 
     private Robot autoPlay; 

     private RobotThread(TestPane component) { 
      this.component = component; 
     } 

     @Override 
     public void run() { 
      try { 
       Thread.sleep(1000); 
      } catch (InterruptedException ex) { 
       Logger.getLogger(TestRobot02.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      try { 
       autoPlay = new Robot(); 

       autoPlay.setAutoDelay(500); 
       autoPlay.mouseMove((component.getLocationOnScreen().x + 1), (component.getLocationOnScreen().y + 1)); 
       autoPlay.mousePress(InputEvent.BUTTON1_MASK); 
       autoPlay.mouseRelease(InputEvent.BUTTON1_MASK); 
       autoPlay.mouseMove((component.getLocationOnScreen().x + component.getWidth() - 1), (component.getLocationOnScreen().y)); 
       autoPlay.mousePress(InputEvent.BUTTON1_MASK); 
       autoPlay.mouseRelease(InputEvent.BUTTON1_MASK); 
       autoPlay.mouseMove((component.getLocationOnScreen().x + 1), (component.getLocationOnScreen().y + component.getHeight() - 1)); 
       autoPlay.mousePress(InputEvent.BUTTON1_MASK); 
       autoPlay.mouseRelease(InputEvent.BUTTON1_MASK); 
       autoPlay.mouseMove((component.getLocationOnScreen().x + component.getWidth() - 1), (component.getLocationOnScreen().y + component.getHeight() - 1)); 
       autoPlay.mousePress(InputEvent.BUTTON1_MASK); 
       autoPlay.mouseRelease(InputEvent.BUTTON1_MASK); 

       Component child = component.getComponent(0); 
       Point pos = child.getLocationOnScreen(); 
       Dimension size = child.getSize(); 
       pos.x += size.width/2; 
       pos.y += size.height/2; 
       autoPlay.mouseMove(pos.x, pos.y); 
       autoPlay.mousePress(InputEvent.BUTTON1_MASK); 
       autoPlay.mouseRelease(InputEvent.BUTTON1_MASK); 

       //    autoPlay.mouseMove(currentX, currentY); 
      } catch (AWTException exp) { 
       exp.printStackTrace(); 
      } 
     } 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      addMouseListener(new MouseAdapter() { 
       @Override 
       public void mouseClicked(MouseEvent e) { 
        System.out.println("Mouse Clicked at " + e.getPoint()); 
       } 

       @Override 
       public void mousePressed(MouseEvent e) { 
        System.out.println("Mouse Pressed at " + e.getPoint()); 
       } 

       @Override 
       public void mouseReleased(MouseEvent e) { 
        System.out.println("Mouse Released at " + e.getPoint()); 
       } 

      }); 

      setLayout(new GridBagLayout()); 
      JButton btn = new JButton("Click me"); 
      btn.addActionListener(new ActionListener() { 
       @Override 
       public void actionPerformed(ActionEvent e) { 
        System.out.println("I was clicked :D"); 
       } 
      }); 
      add(btn); 

     } 

     @Override 
     public Dimension getPreferredSize() { 
      return new Dimension(200, 200); 
     } 
    } 
} 
+0

Спасибо! Мне действительно нужно получить лучший компьютер ... – Zwischenzug

+0

Пришлите мне один;;) – MadProgrammer

Смежные вопросы