Ok, also versuche ich, ein Text-basiertes Spiel mit einer GUI mit JavaFX zu machen. Alles funktionierte gut, bevor ich die eigentliche Spielschleife einsetzte. Obwohl ich einmal in die Spielschleife programmiert habe, würde das Programm nicht starten. Es würde ohne Fehler oder Ausnahmen laufen, aber das Fenster würde einfach nicht auftauchen. Wenn ich das Fenster schließe, sagt die gesamte Befehlszeile in IntelliJ "Prozess beendet mit Beendigungscode 130" was bedeutet, dass das Programm geschlossen wurde, weil der Benutzer Strg + C drückt. Dies ist jedoch nicht der Fall, da das Fenster nicht einmal geöffnet wird. Daher kann kein Benutzer auf Strg + C klicken, um das Programm zu beenden. Meine Frage ist also, was kann ich tun, um mein Programm mit einer Game-Loop (While-Schleife) ausführen zu können, ohne dass sich das Fenster nicht öffnet. Hier ist mein Code:JavaFX-Programm nicht gestartet, wenn ich eine While-Schleife verwenden
package sample;
/**
* Created by Angel on 7/26/16.
*/
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
public class Game {
// Inventory is a class that i made,
// but im sure it has nothing to do with my problem
private Inventory inv = new Inventory();
private String levels;
private Scene scene;
private Label topText;
private Button btn1;
private Button btn2;
private Button btn3;
private boolean gameOn;
public void gameStart(){
// Setting the GUI
// Setting up the window
VBox window = new VBox(210);
// setting up the top text holder.
HBox textHolder = new HBox();
textHolder.setAlignment(Pos.CENTER);
// setting up the label
topText = new Label();
topText.setText("You in a dark room, what do you do?");
// setting up the button holder
HBox buttonHolder = new HBox(50);
buttonHolder.setAlignment(Pos.CENTER);
// setting up the buttons
btn1 = new Button();
btn1.setPrefWidth(260);
btn1.setPrefHeight(30);
btn1.getStyleClass().add("gameButtons");
btn1.setText("1");
btn2 = new Button();
btn2.setPrefWidth(260);
btn2.setPrefHeight(30);
btn2.getStyleClass().add("gameButtons");
btn2.setText("2");
btn3 = new Button();
btn3.setPrefWidth(260);
btn3.setPrefHeight(30);
btn3.getStyleClass().add("gameButtons");
btn3.setText("3");
// finalizing the gui, by putting it all together
textHolder.getChildren().add(topText);
buttonHolder.getChildren().addAll(btn1, btn2, btn3);
window.getChildren().addAll(textHolder, buttonHolder);
// setting up the scene
scene = new Scene(window, 800, 600);
//adding the css script
// adding css script
scene.getStylesheets().add(this.getClass().getResource("game.css").toExternalForm());
// the game loop.
levels = "Storyline";
gameOn = true;
while(gameOn) {
switch (levels) {
case "Storyline":
btn1.setText("search around");
btn2.setText("turn the light on");
btn3.setText("stand in fear");
btn2.setOnAction(e -> levels = "level1");
break;
case "level1":
topText.setText("You turned the light on");
break;
}
}
}
public Scene getScene(){
return scene;
}
}
Warum verwenden Sie eine Endlosschleife, die nur Texte ständig setzt? –
Oh mein Gott, ich wusste nicht einmal, dass ich das mache. Gibt es einen anderen Weg? Ich weiß nicht, wie ich es anders machen soll ... wäre es nicht falsch, ohne eine Schleife zu schreiben? oder der unkonventionelle Weg? Ich versuche eine switch-Anweisung zu verwenden. Gibt es eine andere Möglichkeit, zurück zu gehen und die switch-Anweisung erneut durchlaufen, ohne eine Schleife zu verwenden @ krzyk –
@AngelGarcia Methoden und Objekte verwenden. – SomeJavaGuy