2014-08-29 69 views
0

嗨所以我做這個機器人通過jtextfield3的Java而沒有工作,機器人不發送進入

另外回車是不工作的任何幫助,感謝送的時間信息的數字! 錯誤跑時:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Invalid key code 
    at sun.awt.windows.WRobotPeer.keyPress(Native Method) 
    at java.awt.Robot.keyPress(Robot.java:358) 
    at Roblox.Main.sendkeys(Main.java:12) 
    at Roblox.GUI$1.actionPerformed(GUI.java:33) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
    at java.awt.Component.processMouseEvent(Component.java:6527) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
    at java.awt.Component.processEvent(Component.java:6292) 
    at java.awt.Container.processEvent(Container.java:2234) 
    at java.awt.Component.dispatchEventImpl(Component.java:4883) 
    at java.awt.Container.dispatchEventImpl(Container.java:2292) 
    at java.awt.Component.dispatchEvent(Component.java:4705) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462) 
    at java.awt.Container.dispatchEventImpl(Container.java:2278) 
    at java.awt.Window.dispatchEventImpl(Window.java:2739) 
    at java.awt.Component.dispatchEvent(Component.java:4705) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746) 
    at java.awt.EventQueue.access$400(EventQueue.java:97) 
    at java.awt.EventQueue$3.run(EventQueue.java:697) 
    at java.awt.EventQueue$3.run(EventQueue.java:691) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86) 
    at java.awt.EventQueue$4.run(EventQueue.java:719) 
    at java.awt.EventQueue$4.run(EventQueue.java:717) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 

public static void sendkeys(String text) { 
    try { 
     Robot robot = new Robot(); 
     String lol = text.toUpperCase(); 
     for(int i=0;i<lol.length();i++) { 
      robot.keyPress(lol.charAt(i)); 
     } 
    } catch(java.awt.AWTException exc) { 
     System.out.println("error"); 
    } 
} 

     public void actionPerformed(ActionEvent e) { 
      try { 
       int i = 0; 
       while (i < Integer.parseInt(textField3.getText())) { 

        Robot r = new Robot(); 
        r.delay(Integer.parseInt(textField2.getText())); 
        Main.sendkeys(textField1.getText()); 

        Robot okRobot = new Robot(); 
        okRobot.keyPress(KeyEvent.VK_ENTER); 
        okRobot.keyRelease(KeyEvent.VK_ENTER); 
        i++; 
       } 

      } catch(java.awt.AWTException exc) { 
       System.out.println("Error!"); 
      } 
     } 
    }); 
    setVisible(true); 
} 
+0

請發佈完整的堆棧跟蹤,而不僅僅是例外情況。 – gparyani 2014-08-29 21:45:59

+0

好了編輯 – Shrekt 2014-08-29 21:48:19

回答

1

試試這個:

public static void sendkeys(String text) { 
    try { 
     Robot robot = new Robot(); 
     String lol = text.toUpperCase(); 
     for(int i=0;i<lol.length();i++) { 
      robot.keyPress(Character.getNumericValue(lol.charAt(i))); 
     } 
    } catch(java.awt.AWTException exc) { 
     System.out.println("error"); 
    } 

} 

通知robot.keyPress(Character.getNumericValue(lol.charAt(i)))傳遞給Robot.keyPress(int c)

當你通過之前,你的字符轉換成int一個char in一種方法,它會自動轉換爲類型Character,不會打字int

+0

Upvoted這個答案,因爲它更簡單,可能適用於這樣的所有情況。 – gla3dr 2014-08-29 22:36:46

+0

經測試,由於某種原因無法正常工作:/ – Shrekt 2014-08-30 13:39:25

+0

有趣。我很好奇爲什麼現在。當我有機會時,我會自己做一些測試。 – NonSecwitter 2014-09-01 17:20:43

1

編輯:NonSecwitter的答案是簡單的,可能在所有情況下工作的,所以這個答案很可能是多餘的。

問題是這一行:

robot.keyPress(lol.charAt(i)); 

你需要傳遞int s到Robot.keyPress(int),不char秒。

做很可能會得到charint價值的最好的事情:

int c = Character.getNumericValue(lol.charAt(i)); 

然後將其轉換爲KeyEvent常數:

int k = KeyEvent.getExtendedKeyCodeForChar(c); 

這將字符轉換爲相應的鍵碼,我認爲是你想要的。說實話,我不確定是否需要第二步。

+0

這將無法正常工作,該方法的正確簽名是'public static int getExtendedKeyCodeForChar(int c)' – NonSecwitter 2014-08-29 22:05:05

+0

在您的答案中獲取數字值是否總能正常工作?不知何故,我覺得它不是數字值到關鍵代碼的精確映射。 – gla3dr 2014-08-29 22:07:47

+0

嗯,嗯,'Robot.keyPress()'正在尋找一個int,而不是一個鍵碼。我不知道在方法文檔中對Unicode的警告暗示了這一點,但似乎應該爲角色獲得標準映射。 http://docs.oracle.com/javase/7/docs/api/java/lang/Character.html#getNumericValue(char) – NonSecwitter 2014-08-29 22:11:39

相關問題