2017-08-15 1 views
0

私はGUIにシステムメッセージを投稿するためのインターフェースを持っているが、私はやっている方法は、それはインターフェースのメソッド(ではない、それを実装して1)を使用しようとしたクラスにNULLポインタ例外が発生しJavaFXコントローラにインターフェイスを実装するにはどうしたらいいですか?

public interface SystemMessage { 
    void postMessage(String outText); 
} 

私は(私はまだスレッドしていないですいくつかの背景の仕事をするために、いくつかのヘルパークラスを呼び出して、私のコントローラでは、私は、このインタフェースを実装し、Main.javaからGUI

public class MainController implements SystemMessage { 
    @FXML 
    public DialogPane systemMessage; 

    @Override 
    public void postMessage(String outText) { 
     systemMessage.setContentText(outText); 
    } 
} 

にメッセージを投稿するためにそれを使用するようにすべてがある言い訳メインスレッド上)

@Override 
public void start(Stage primaryStage) throws Exception{ 
    FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/entry.fxml")); 
    Parent root = loader.load(); 
    this.mainController = loader.getController(); 
    primaryStage.setTitle("ASI Sync!"); 
    primaryStage.setScene(new Scene(root, 300, 275)); 
    primaryStage.show(); 
    initializeSync(); 
} 

private void initializeSync() { 
    //Each of these perform several function on initialization 
    Identity identity = new Identity(); 
    String[] args = null; 
    Api api = new Api(); 
    api.Get(args); 
    SqLite db = new SqLite(); 
} 

したがって、私のアイデンティティクラスでは、初期化時にメッセージを投稿するためにインターフェイスを使用しようとしましたが、NULL POINTER EXCEPTIONが返されます。

public class Identity { 
    private String machineId = null; 
    public String statusText = null; 

    SystemMessage systemMessage;// Trying to instantiate the system message interface?? 

    public Identity(){ 
     systemMessage.postMessage("Checking Machine Identity"); 
     //..// 
    } 
    //..// 
} 

答えて

1

私は、あなたの関心事がJavaFXに限定されているとは確信していません。

Identityオブジェクトを作成するときは、依存関係をSystemMessageに設定する必要があります。
置き換え:@silversunhunterが正しく実際mainControllerを渡す答えたよう

public Identity(SystemMessage systemMessage){ 
    this.systemMessage = systemMessage; 
    systemMessage.postMessage("Checking Machine Identity"); 
} 
+0

回答ありがとうございます。私は理解しようとしています。したがって、コントローラを接続しているfxmlloaderを参照し、Identityクラスに渡して、インターフェイスの使用場所や使用方法を知る必要があります。 – silversunhunter

+0

また、私の編集を参照してください。メインファイルには、私がstart()で設定したmainControllerオブジェクトがあります。私は主にこれを使用して、インスタンス化される各クラスに渡すことができますか? – silversunhunter

+0

私はそれを理解しました...私はあなたのコードを私のstart()メソッドでユーザに渡してから、( "reference"?)を他のクラスに渡すことができました!!!ありがとう!!! – silversunhunter

1

:それはSystemMessageパラメータを取るように

... 
MainController mainController = ... // retrieve it with fxmlLoader if required 
Identity identity = new Identity(mainController); 

そしてIdentityコンストラクタを変更:によって

Identity identity = new Identity(); 

を〜Identity

​​
関連する問題