2014-07-10 17 views
0

我有簡單的主類。 在那裏,我試圖通過userWindowLogin從主類傳遞對象到JavaFX應用程序

package client; 


public class Client{ 

    public User user; 

    public static void main(String[] args) { 

     try { 
      Client client = new Client(); 
      client.run(args); 
     } catch (Exception e) { 
      System.out.println("[ERR] Fatal error"); 
     } 

    } 

    public void run(String[] args) 
    { 

     user = new User(); 

     WindowLogin windowLogin = new WindowLogin(); 
     windowLogin.user = user; 
     windowLogin.show(); 

    } 

} 

窗口主類。在那裏,我嘗試調用usertest()功能(在真實的,我需要把它傳遞給WindowMainController):

package client; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.Parent; 

import java.io.IOException; 

public class WindowLogin extends Application{ 

    private Stage stage; 
    public User user; 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     stage = new Stage(); 
     try { 
      FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("views/WindowLogin.fxml")); 

      WindowLoginController controller = 
        fxmlLoader.<WindowLoginController>getController(); 

      user.test(); 

      Parent root = fxmlLoader.load(); 
      Scene scene = new Scene(root); 
      stage.setScene(scene); 
      stage.show(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void show(){ 
     launch(); 
    } 
    public void hide() { stage.hide(); } 

} 

當我嘗試運行它:

Exception in Application start method

當然(也許:) )它是因爲windowLogin中的usernull

我做錯了什麼? user如何通過windowLogin? (我不會使用Singletone)


更新:

我需要使用開始user()方法,如我之前說的 - 我需要傳遞userWindowMainController

回答

1

概述

您在這裏面臨的問題是調用launch(),Javafx線程創建一個新的對象WindowLogin。因此,您爲WindowLogin創建的對象以及指定的用戶不再在啓動方法中使用!

WindowLogin windowLogin = new WindowLogin(); 
windowLogin.user = user; 

你可以通過在WindowLogin中聲明User爲靜態來克服這個問題!

public static User user; 

這將有助於只保留在用戶

+0

您的解決方案正常工作的實例。但是有一個問題:我不能在'start'方法中使用'this.user'。當我做'user.test()'時,它仍然會顯示'Exception in Application start method'' –

+0

幾個選項 - 它的一個也是一個,也是一個選項 - 聲明class爲static:D。好吧,我沒有看到另一個出口:(Thankyou的幫助;) –

+1

你不必聲明類爲靜態,只需將用戶對象的引用聲明爲靜態! – ItachiUchiha

相關問題