【发布时间】:2016-11-26 05:05:14
【问题描述】:
我需要有关此 java 代码的帮助。我有三个场景登录场景、管理员场景和玩家场景。当我运行程序并输入该用户和密码时,第二个应该打开。现在的问题是,第二个场景没有打开。它甚至连接到数据库,但第二个场景没有打开。我已经检查了代码,我看不出它有什么问题。有人可以帮助我,发生了什么。
这是我的主要代码。
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class GiantsLogin extends Application {
private static Stage stage;
@Override
public void start(Stage stage) throws IOException {
setPrimaryStage(stage);
Parent root = FXMLLoader.load(getClass().getResource("GiantsLogin.fxml"));
Scene scene = new Scene(root);
scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
stage.setScene(scene);
stage.setTitle("Giants Login");
stage.show();
}
public static void setPrimaryStage(Stage primaryStage) {
stage = primaryStage;
}
public static Stage getPrimaryStage() {
return stage;
}
public static void main(String[] args) {
launch(args);
}
}
这是我的主控制器:
import java.io.IOException;
import java.sql.*;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.Event;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
public class GiantsLoginController {
public String dataName, serverName, password;
public int num;
private Connection connect = null;
private Statement stmt = null;
private boolean userPass, connected;
private Connections connection;
@FXML
private ComboBox<String> sType;
@FXML
public TextField dbName;
@FXML
private TextField sName;
@FXML
private Button loginB;
@FXML
private PasswordField sPassword;
@FXML
private Pane paneL;
@FXML
private GridPane gPane;
@FXML
private ComboBox<String> uType;
ObservableList<String> sLists = FXCollections.observableArrayList("MySQL LOCAL",
"MYSQL REMOTE", "SQL SERVER LOCAL", "SQL SERVER");
ObservableList<String> uList = FXCollections.observableArrayList("Player",
"Admin");
@FXML
public void initialize() {
sType.setItems(sLists);
uType.setItems(uList);
}
@FXML
public void loginBClick (Event event) {
if (isAllFieldFillup()) {
switch(uType.getValue().trim()) {
case "Admin":
if (connectCheck()) {
try {
admindStage(GiantsLogin.getPrimaryStage());
}
catch (Exception e) {
}
}
case "Player":
if (connectCheck()) {
try {
playerStage(GiantsLogin.getPrimaryStage());
}
catch (Exception e) {
}
}
}
}
}
public void admindStage(Stage stage) throws IOException {
GiantsAdminController controller = new GiantsAdminController("Hello World!");
FXMLLoader loader = new FXMLLoader (getClass().getResource("GiantsAdmin.fxml"));
loader.setController(controller);
stage.hide();
stage.setScene(new Scene((Pane) loader.load()));
stage.show();
}
public void playerStage(Stage stage) throws IOException {
GiantsAdminController controller = new GiantsAdminController("Hello World!");
FXMLLoader loader = new FXMLLoader(getClass().getResource("GiantsPlayer.fxml"));
loader.setController(controller);
stage.hide();
stage.setScene(new Scene((Pane) loader.load()));
stage.show();
}
public void closeConnection () {
if (connect != null) {
try {
stmt.close();
connect.close();
}
catch (SQLException e) {
}
}
}
public boolean connectCheck() {
connected = false;
dataName = dbName.getText();
serverName = sName.getText();
password = sPassword.getText();
switch (sType.getValue()) {
case "MySQL LOCAL":
num = 1;
break;
case "MYSQL REMOTE":
num = 2;
break;
case "SQL SERVER LOCAL":
num = 3;
break;
case "SQL SERVER":
num = 4;
break;
default:
}
if (connect == null) {
connect = Connections.getconnect(num, dataName, serverName, password);
}
if (connect == null ) {
System.out.println("Still no connection");
}
if (stmt == null) {
try {
stmt = connect.createStatement();
connected = true;
} catch (SQLException e) {
Alert notify = new Alert(Alert.AlertType.INFORMATION);
notify.setTitle("Blank filed");
notify.setHeaderText(null);
notify.setContentText("Incorrect login.");
notify.showAndWait();
connected = false;
}
}
return connected;
}
private boolean isAllFieldFillup() {
boolean allInfo;
if (sType.getValue().equals("server type") && dbName.getText().isEmpty()
&& sName.getText().isEmpty() && sPassword.getText().isEmpty()) {
Alert notify = new Alert(Alert.AlertType.INFORMATION);
notify.setTitle("Blank filed");
notify.setHeaderText(null);
notify.setContentText("You are missing some information.");
notify.showAndWait();
allInfo = false;
}
else {
allInfo = true;
}
return allInfo;
}
}
这是我为我的管理员和玩家场景搭建舞台的地方。
public void admindStage(Stage stage) throws IOException { GiantsAdminController controller = new GiantsAdminController("Hello World!"); FXMLLoader loader = new FXMLLoader (getClass().getResource("GiantsAdmin.fxml")); loader.setController(controller); stage.hide(); stage.setScene(new Scene((Pane) loader.load())); stage.show(); } public void playerStage(Stage stage) throws IOException { GiantsAdminController controller = new GiantsAdminController("Hello World!"); FXMLLoader loader = new FXMLLoader(getClass().getResource("GiantsPlayer.fxml")); loader.setController(controller); stage.hide(); stage.setScene(new Scene((Pane) loader.load())); stage.show(); }这就是我在 GiantsLoginController 中调用这两个阶段的地方。
public void loginBClick (Event event) { if (isAllFieldFillup()) { switch(uType.getValue().trim()) { case "Admin": if (connectCheck()) { try { admindStage(GiantsLogin.getPrimaryStage()); } catch (Exception e) { } } case "Player": if (connectCheck()) { try { playerStage(GiantsLogin.getPrimaryStage()); } catch (Exception e) { } } } } }
这是我的管理场景的控制器
import java.io.IOException;
import java.net.URL;
import java.sql.Statement;
import java.util.ResourceBundle;
import javafx.collections.*;
import javafx.event.Event;
import javafx.fxml.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.stage.Stage;
public class GiantsAdminController implements Initializable {
@FXML
private Button connect = null;
private boolean connected;
private Statement stmt;
@FXML
private TextField aRank;
@FXML
private TextField aName;
@FXML
private TextField aPosition;
@FXML
private TextField aSchool;
@FXML
private TextField aAge;
@FXML
private TextField aWar;
@FXML
private Button clearB;
@FXML
private Button addB;
@FXML
private TableColumn<?, ?> rank;
@FXML
private TableColumn<?, ?> name;
@FXML
private TableColumn<?, ?> position;
@FXML
private TableColumn<?, ?> school;
@FXML
private TableColumn<?, ?> age;
@FXML
private TableColumn<?, ?> war;
@FXML
private TextField qSearch;
@FXML
private Button search;
@FXML
private Button singout;
@FXML
private Button delete;
@FXML
private ComboBox<String> serverType;
@FXML
private TextField dbName;
@FXML
private TextField serverName;
@FXML
private TextField sPassword;
public GiantsAdminController(String message) {
System.out.println("You said: " + message);
}
public GiantsAdminController() {
}
ObservableList<String> sLists = FXCollections.observableArrayList("MySQL LOCAL",
"MYSQL REMOTE", "SQL SERVER LOCAL", "SQL SERVER");
@FXML
public void initialize() {
serverType.setItems(sLists);
}
@FXML
public void clearBClick (Event event) {
aRank.clear();
aName.clear();
aPosition.clear();
aSchool.clear();
aAge.clear();
aWar.clear();
}
@FXML
public void SingOutClick(Event event) throws IOException {
Parent giantsLogin = FXMLLoader.load(getClass().getResource("/giants/GiantsLogin.fxml"));
Scene gLScene = new Scene(giantsLogin);
gLScene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());
stage.setScene(gLScene);
stage.show();
}
@Override
public void initialize(URL location, ResourceBundle resources) {//To change body of generated methods, choose Tools | Templates.
}
【问题讨论】:
-
请学习如何使用调试器。如果没有可用的完整代码/设置,很难为您提供帮助。另一方面,您可以简单地通过代码来识别问题,这不会花费一分钟。使用空的 catch 块绝不是一个好主意,除非您的代码将继续正常工作,即使发生异常也是如此。即使在大多数情况下,在某处记录信息也是一个好主意。尤其是在您正在寻找的情况下错误的例外可以提供有价值的信息。btw:选择
Admin是故意尝试使用播放器和管理员场景的错误吗?
标签: javafx fxml netbeans-8