1

JnativeHook MoseClicked イベントが発生したときに javafx TextField テキストを設定しようとしていますが、「NullPointerException」エラーに直面しています。コントローラー クラス コードをここに配置します。

public class FXMLDocumentController implements Initializable, NativeMouseListener {

@FXML
private TextField txt_Search;

@Override
public void initialize(URL url, ResourceBundle rb) {

   txt_Search.setText("dvdf"); //this is work and no problem is in here
           Listener();
}
public void Listener() {
    // Clear previous logging configurations.
    LogManager.getLogManager().reset();
    // Get the logger for "org.jnativehook" and set the level to off.
    Logger logger = Logger.getLogger(GlobalScreen.class.getPackage().getName());
    logger.setLevel(Level.OFF);
    try {
        GlobalScreen.registerNativeHook();
    } catch (NativeHookException ex) {
        System.err.println("There was a problem registering the native hook.");
        System.err.println(ex.getMessage());

        System.exit(1);
    }
    // Construct the example object.
    FXMLDocumentController example = new FXMLDocumentController();
    // Add the appropriate listeners.
    GlobalScreen.addNativeMouseListener(example);
}

 @Override
public void nativeMouseClicked(NativeMouseEvent nme) {
    if (nme.getClickCount() == 2) {
        System.out.println("Double Click Event");
        txt_Search.setText("Mouse clicked");
    }

}

@Override
public void nativeMousePressed(NativeMouseEvent nme) {
    // throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

@Override
public void nativeMouseReleased(NativeMouseEvent nme) {
    //   throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}

}

そして、このエラーが発生しています:

org.jnativehook.GlobalScreen$EventDispatchTask.processButtonEvent(Unknown Source)の org.jnativehook.GlobalScreen $EventDispatchTask
のスレッド「JNativeHook Dispatch Thread」でのダブルクリック イベント例外 java.util.concurrent.ThreadPoolExecutor$Worker.run( ThreadPoolExecutor) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) で org.jnativehook.GlobalScreen$EventDispatchTask.run(不明なソース)で processButtonEvent (不明なソース) .java:617) で java.lang.Thread.run(Thread.java:745)






アップデート:

コードを更新し、txt_Search に @FXML アノテーションを付けます

4

2 に答える 2

0

戻って、使用法 wiki のswingでの作業セクションを確認する必要があります。このライブラリによって生成されるイベントは、デフォルトでは Swing イベント ディスパッチ スレッドでは動作しません。GlobalScreen.setEventDispatcher(new SwingDispatchService());フックを登録する前に、swing コンポーネントまたは使用へのアクセスをラップする必要があります。詳細については、イベント ディスパッチ スレッドSwing スレッドの安全性についてお読みください。

于 2015-06-07T01:01:47.440 に答える
0

@Kingtak 'txt_Search' 変数を初期化したことがありません。ここで @FXML アノテーションを使用し、fxml ファイルで ID をテキストフィールドに割り当てることができます。

于 2015-06-06T06:45:21.190 に答える