2012-08-01 68 views
0

我想爲Java AWT機器人制作一個單獨的類,以便與項目一起使用,但我無法設置它,因爲我在網上發現的所有示例都似乎打包代碼轉換爲單個.java文件。Java機器人 - 類功能問題

我的代碼工作正常,但我想知道如果我可以更好地設置功能。

爲RobotLib.java類的代碼如下:

package com.z; 

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 

    public class RobotLib { 

    private static Robot robot; 

    // Press Function 
    public void Press(int key, int time){ 
     try { 
     Robot robot = new Robot(); 
      robot.keyPress(key); 
      robot.delay(time); 
      robot.keyRelease(key); 

     } catch (AWTException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

而且我Example.java代碼:

package com.z; 

import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 

public class Example { 

    public static void main(String[] args) { 

     RobotLib robot = new RobotLib(); 

     robot.Press(KeyEvent.VK_A,100); // type a 

    } 
} 

隨着RobotLib.java類我在想,如果有可能如果沒有用try/catch和新的Robot()來包裝它們的功能,那麼代替上面的版本,它會是這樣的:

public void Press(int key, int time){ 
    robot.keyPress(key); 
    robot.delay(time); 
    robot.keyRelease(key); 
} 

的try/catch語句和新的機器人()似乎然而需要,如果我把這些離開我得到的錯誤是這樣的:

Exception in thread "main" java.lang.NullPointerException 
    at com.z.RobotLib.Press(RobotLib.java:35) 
    at com.z.Example.main(Example.java:14) 

我很新的Java代碼,並可能建立類錯誤的方式,有沒有辦法解決這個錯誤或有我想要的功能?

回答

0

我只是找到了一種方法做我想要使用尼科夫發佈的代碼的修改版本,它允許較短版本的功能像我想:

public class RobotLib { 

private static Robot robot; 

public RobotLib(){ 
    try { 
    robot = new Robot(); 
} catch (AWTException e) { 
    e.printStackTrace(); 
} 
} 

// Press Function 
public void Press(int key, int time){ 
    robot.keyPress(key); 
    robot.delay(time); 
    robot.keyRelease(key); 
} 

} 
1

是的,您確實需要try/catch塊,但是也有一種方法可以更好地設置這些函數。每次調用Press方法時,都不需要創建機器人。在你的構造函數中創建你的靜態Robot實例。

public class RobotLib { 

private static Robot robot; 

public RobotLib(){ 
    robot = new Robot(); 
} 

// Press Function 
public void Press(int key, int time){ 
    try { 
     robot.keyPress(key); 
     robot.delay(time); 
     robot.keyRelease(key); 

    } catch (AWTException e) { 
     e.printStackTrace(); 
    } 
} 

} 
+0

謝謝,我試圖避免使用try,catch和new Robot()的需求。基本上我想縮短這些功能,並使它們類似於你可以在網上找到的機器人類的例子,他們使用一個.java文件。就像我貼近錯誤信息的末尾那樣,是否可以在課堂上使用? – zeddex 2012-08-01 01:25:38

+0

我想我會設置它如何建議,所以我已經接受了你的答案,它會很高興能夠避免每個功能的try catch,但我想這是不可能在一個類中。謝謝您的幫助。 – zeddex 2012-08-01 01:38:12

+0

實際上已經測試過你的代碼,它給了我錯誤。新的Robot()和AWTException在eclipse中突出顯示。任何想法如何糾正? – zeddex 2012-08-01 01:50:00

1

不太確定你的問題,但我希望這可能會有所幫助!

您可以拋出異常以避免不必要的try和catch塊。此外,創建Robot類的實例將使您避免在需要它的everyline上編寫新的Robot()。

+0

歡迎來到SO。嘗試通過添加代碼例如你的說法來改善你的答案:) – 2014-09-30 14:48:00

+0

非常感謝...很快就會相處融洽..你很好,菲利克斯 – Positive 2014-09-30 14:53:34