2016-03-31 11 views
0

あるクラスから別のクラスにStringsを渡そうとしているので、ユーザー名に応じてラベルを初期化できます。Java - あるクラスから別のクラスに値を渡す

ここにありますが、私のコードです:

while (rs.next()) { 
        uID = rs.getString("ID"); 
        uLoginName = rs.getString("user_login"); 
        uNiceName = rs.getString("user_nicename"); 
        password = rs.getString("user_pass"); 

        if (uLoginName.equals(username) && password.equals(enteredPass)) { 

         ***//Values That I am Trying to pass*** 

         TutorControlPanelController panel = new TutorControlPanelController(); 
         panel.setUserLoginName(uLoginName); 
         try { 

          Parent root = FXMLLoader.load(getClass().getResource("SomePath")); 
          Scene scene = new Scene(root); 
          String css = this.getClass().getResource("Style.css").toExternalForm(); 
          scene.getStylesheets().add(css); 
          Stage stage = new Stage(); 
          stage.setTitle("Tutor Control Panel"); 
          stage.setScene(scene); 

          stage.show(); 

         } catch (IOException ex) { 
          Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex); 
         } 
        } else { 
         System.out.println("user not found"); 

        } 

       } 

      } catch (SQLException ex) { 
       Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex); 
      } 

他のクラスでは、私は

 public class SomeClass implements Initializable { 

    @FXML 
    private GridPane gridView; 
    @FXML 
    private Button recordButton; 
    @FXML 
    private Button stopButton; 
    @FXML 
    private MenuButton settingsButton; 
    @FXML 
    private MenuItem qualitySettings; 
    @FXML 
    private MenuItem videoSettings; 
    @FXML 
    private Button lessoncategory; 
    @FXML 
    private MenuButton serverUpload; 
    @FXML 
    private MenuItem startUpload; 
    @FXML 
    private MenuItem stopUpload; 
    @FXML 
    private Button timer; 
    @FXML 
    private Label timerHours; 
    @FXML 
    private Label timerMinutes; 
    @FXML 
    private Label timerSeconds; 
    @FXML 
    private Button logOut; 
    @FXML 
    private Label uNameLabel; 

    private String uID; 
    private String username; 
    private String userLoginName; 
    private String userNiceName; 

    public TutorControlPanelController(String uID, String username, String userNiceName) { 
     this.uID = uID; 
     this.username = username; 
     this.userNiceName = userNiceName; 

    } 

    /** 
    * Initializes the controller class. 
    */ 
    public TutorControlPanelController() { 

    } 

    public String getuID() { 
     return uID; 
    } 

    public void setuID(String uID) { 
     this.uID = uID; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public String getUserNiceName() { 
     return userNiceName; 
    } 

    public void setUserNiceName(String userNiceName) { 
     this.userNiceName = userNiceName; 
    } 

    public String getUserLoginName() { 
     return userLoginName; 
    } 

    public void setUserLoginName(String userLoginName) { 
     this.userLoginName = userLoginName; 
    } 

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

     assert uNameLabel != null : "fx:id=\"someID\" was not injected: check your FXML file 'somePath'."; 

     setlabels(); 


    } 

    public void setlabels() { 
     uNameLabel.setText(getUserLoginName()); 

     // and just to check also printing the value 

     System.out.println(getUserLoginName()); 
    } 

私は取得していますすべてがnull

更新やって 私はそれは難しい正確に何が起こっているかを把握するために見つけていますに。

+0

ユーザーログイン名の値を取得して設定する両方のクラスのコードを投稿できますか? –

+0

あなたは今すぐ仲間を確認してください –

+0

setUserLoginName()の後にsetlabels()が呼び出されていることは確かですか?デフォルトのコンストラクタがあり、setuserLoginNameが必ず呼び出されるという特別な要件はないので、インスタンス変数を空のStringに初期化してNPEの問題を回避します。可能であれば、デフォルトコンストラクタを削除してください。 – KevinO

答えて

0

私はあなたの2番目のクラスであなたのファーストクラスをどこに呼びますか分かりません。 最初の属性を属性としてsecondに呼び出す必要があります。すると、userLoginNameを取得できます。

これはあなたの第二のクラスで何ができるかです:

FirstClass myFirstClass = new FirstClass(); 
uNameLabel.setText(myFirstClass.getUserLoginName()); 
0

現時点では、クラスTutorControlPanelControllerはデフォルトコンストラクタとパラメータ化コンストラクタを持っています。デフォルトコンストラクタが呼び出されると、Stringインスタンス変数はすべてnullに初期化されます。さまざまなメソッドを呼び出すことによってに設定されることがありますが、保証される保証はありません。 、)(

public TutorControlPanelController() { 

} 

そしてrs.nextとのコードスニペットでパラメータコンストラクタを使用するための呼び出しを変更します:

より良いアプローチは(このコードを削除)デフォルトコンストラクタを取り除くことであろう

if (uLoginName.equals(username) && password.equals(enteredPass)) { 
    TutorControlPanelController panel = new TutorControlPanelController(uId, uLoginName, uNiceName); 

    try { 
    ... 

この方法では、ほとんどのインスタンス変数が確実に初期化されます。

ここではコードが不十分であるため、デフォルトコンストラクタのフレームワーク要件があるかどうかはわかりません。その場合は、Stringインスタンス変数を空の文字列に初期化する

private String uID = ""; 
private String username = ""; 
private String userLoginName = ""; 
private String userNiceName = ""; 

この場合、NPEは使用しないでください。

+0

いいえフレームワーク要件はありません。このアプローチを試してみましょう。どうもありがとうございました。 –

関連する問題