2013-10-06 4 views
2

У меня немного проблемы с JavaFX в Netbeans 7.3.1. Я пытаюсь сделать игру, которая бросает кубик. Предполагается, что программа спросит пользователя, справедлив ли он или нет, а также другая информация (например, количество сторон) для инициализации штампа для качки. Когда нажата кнопка броска, она перевернет кубик.JavaFX: как запросить ввод пользователя перед отображением графического интерфейса пользователя

Проблема заключается в том, что, поскольку JavaFX игнорирует основную программу при запуске графического интерфейса, я не знаю, где (или как) запрашивать у пользователя эту информацию до загрузки графического интерфейса пользователя.

public class DiceGame extends Application { 

@Override 
public void start(Stage primaryStage) { 
    Button btn = new Button(); 
    btn.setText("Roll Die!"); 
    btn.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      // 
      // code for rolling a die goes here. 
     } 
    }); 

    StackPane root = new StackPane(); 
    root.getChildren().add(btn); 

    Scene scene = new Scene(root, 300, 250); 

    primaryStage.setTitle("Dice Game"); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

/** 
* The main() method is ignored in correctly deployed JavaFX application. 
* main() serves only as fallback in case the application can not be 
* launched through deployment artifacts, e.g., in IDEs with limited FX 
* support. NetBeans ignores main(). 
* 
* @param args the command line arguments 
*/ 


public static void main(String[] args) { 

    //ask user for n value to initialize a die object before the javafx ui is launched. 

    System.out.println("Is your die loaded or fair? *Input 1 for fair and 2 for loaded* "); 

    Scanner fair_or_loaded = new Scanner(System.in); //Determines fair or loaded die. 
    int input = fair_or_loaded.nextInt(); 

    if (input == 1) { 
     System.out.println("Input an N value for a fair die: "); 
     Scanner user_input = new Scanner(System.in); //Created a fair die. 
     int n = user_input.nextInt(); 
     Die D1 = new Die(n); //User created die. 

    } else { //Loaded die is created. Need Scanner for loadedSide and LoadFactor. 
     System.out.println("Input an N value for a loaded die: "); 
     Scanner loaded_n_input = new Scanner(System.in); 
     int loaded_n = loaded_n_input.nextInt(); //loaded n value created 

     System.out.println("Input a side to be loaded: "); 
     Scanner user_side = new Scanner(System.in); 
     int side_loaded = user_side.nextInt(); //loaded side created 

     System.out.println("Input a load factor: "); 
     Scanner user_load = new Scanner(System.in); 
     int factor_load = user_load.nextInt(); //load factor created 

     LoadedDie DL = new LoadedDie(loaded_n, side_loaded, factor_load); //Loaded die is created. 
    } 

    launch(args); 
    } 
} 

Большое спасибо!

ответ

2

Как сказано в комментарии в этом коде, приложения JavaFX при запуске должным образом не используют метод main(), как это делают традиционные приложения Java - они создают экземпляр класса приложения по умолчанию и вызывают его метод запуска.

Итак, если вы хотите, чтобы этот код выполнялся до отображения графического интерфейса пользователя, вам нужно будет вызвать его в начале метода запуска. Предпочтительно, поместите соответствующий код в отдельный метод, а затем просто вызовите этот метод, прежде чем приступать к созданию пользовательского интерфейса.

+0

Это решило! Спасибо за тонну за помощь! – user2852171

+0

@ пользователь2852171 проблем нет. – berry120

Смежные вопросы