0

プロジェクトで使用する Java AWT ロボット用の別のクラスを作成しようとしていますが、オンラインで見つけたすべての例がコードを単一の .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 と new Robot() でラップせずに使用できるかどうか疑問に思っていたので、上記のバージョンの代わりに次のようになります。

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

ただし、try/catch と new Robot() が必要なようです。これらを取り除くと、次のようなエラーが発生します。

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

私はJavaコーディングにまったく慣れていないので、クラスを間違った方法で設定している可能性があります。そのエラーを修正する方法や、必要な機能を持つ方法はありますか?

4

3 に答える 3

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();
    }
} 

}
于 2012-08-01T01:18:08.163 に答える
0

Raskolnikovが投稿したコードの修正版を使用して、私が望んでいたことを行う方法を見つけました.

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);
} 

}
于 2012-08-01T02:08:46.697 に答える