JavaFX 2.0 FXML Ressource zu laden Fehler
@Override public void start(Stage primaryStage) {
try {
stage = primaryStage;
gotoLogin();
primaryStage.show();
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
enter code here
public User getLoggedUser() {
return loggedUser;
}
public boolean userLogging(String userId, String password){
if (Authenticator.validate(userId, password)) {
loggedUser = User.of(userId);
gotoProfile();
return true;
} else {
return false;
}
}
public void userLogout(){
loggedUser = null;
gotoLogin();
}
private void gotoProfile() {
try {
replaceSceneContent("../skinFolder/fxml/profile.fxml");
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void gotoLogin() {
try {
replaceSceneContent("../skinFolder/fxml/login.fxml");
} catch (Exception ex) {
Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
}
}
private Parent replaceSceneContent(String fxml) throws Exception {
Parent page = (Parent) FXMLLoader.load(App.class.getResource(fxml), null, new JavaFXBuilderFactory());
Scene scene = stage.getScene();
if (scene == null) {
scene = new Scene(page, 700, 450);
scene.getStylesheets().add(App.class.getResource("../skinFolder/css/defaultSkin.css").toExternalForm());
stage.setScene(scene);
} else {
stage.getScene().setRoot(page);
}
stage.sizeToScene();
return page;
}}
So, ich bin versucht, das Muster der FXML Login-Beispiel, nur gebe ich den anderen Weg für die fxml. Und in der fxml-Dateien, die ich gab den Weg an den controller.
The log shows those errors:
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at javafx.fxml.FXMLLoader.loadType(Unknown Source)
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(Unknown Source)
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(Unknown Source)
at javafx.fxml.FXMLLoader$Element.processStartElement(Unknown Source)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(Unknown Source)
at javafx.fxml.FXMLLoader.processStartElement(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at Main.App.replaceSceneContent(App.java:115)
at Main.App.gotoProfile(App.java:100)
at Main.App.userLogging(App.java:86)
at skinFolder.controllers.LoginController.processLogin(LoginController.java:28)
Login-Controller-Klasse
public class LoginController {
@FXML private TextField userId;
@FXML private PasswordField password;
@FXML private Label errorMessage;
@FXML protected void processLogin() {
if(!App.getInstance().userLogging(userId.getText(), password.getText())){
errorMessage.setText("Username/password combination is invalid.");
}
}
}
Und die Linie 28:
if(!App.getInstance().userLogging(userId.getText(), password.getText())){
Ich erwähnen, dass die fxml-Dateien in einem anderen Ordner die Main-Datei-Ordner. Ich verstehe nicht, warum bekomme ich diesen Fehler wenn ich das Beispiel gab, die von Oracle, aber mit einem anderen Ordner Struktur!
Meine app-Ordner-Struktur:
- Main
- Modell
- Sicherheit
- skinFolder - css
- skinFolder - fxml
- skinFolder - Controller
Hier ist das Profil.fxml-code:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.net.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?>
<?import javafx.scene.text.*?>
<AnchorPane id="Profile" styleClass="profile" xmlns:fx="http://javafx.com/fxml" fx:controller="skinFolder.controllers.ProfileController">
<children>
<Button maxHeight="2.0" text="Update" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="168.0" fx:id="update" onAction="#processUpdate"/>
<Label layoutX="56.0" layoutY="77.0" text="Please review your profile data." fx:id="message" />
<Label layoutX="56.0" layoutY="123.0" text="User:" />
<Label layoutX="56.0" layoutY="224.0" text="Phone:" />
<Label layoutX="56.0" layoutY="173.0" text="Email:" />
<TextField editable="false" layoutX="149.0" layoutY="120.0" maxWidth="2.0" minHeight="30.0" minWidth="215.0" prefHeight="30.0" prefWidth="215.0" fx:id="user" />
<TextField editable="true" layoutX="149.0" layoutY="171" maxWidth="2.0" minHeight="30.0" minWidth="215.0" prefHeight="30.0" prefWidth="215.0" fx:id="email" />
<TextField layoutX="149.0" layoutY="224" maxWidth="2.0" minHeight="30.0" minWidth="215.0" prefHeight="30.0" prefWidth="215.0" fx:id="phone" />
<CheckBox layoutX="402" layoutY="120.0" text="Subscribed to NewsLetter" fx:id="subscribed" />
<Separator layoutX="380" layoutY="110" prefHeight="155" orientation="vertical"/>
<Hyperlink layoutY="24.0" text="logout" AnchorPane.rightAnchor="52.0" fx:id="logout" onAction="#processLogout"/>
<Button disable="true" maxHeight="2" maxWidth="2.0" text="Continue" defaultButton="true" AnchorPane.bottomAnchor="15.0" AnchorPane.rightAnchor="52.0" fx:id="Button" onAction="#processLogout"/>
<Label layoutX="150.0" layoutY="401.0" opacity="0.0" text="Profile successfully updated!" fx:id="success" />
<Label layoutX="56.0" layoutY="284.0" text="Address:" />
<TextArea maxHeight="2.0" maxWidth="2.0" minHeight="85.0" minWidth="448.0" prefHeight="85.0" prefWidth="448.0" AnchorPane.bottomAnchor="69.0" AnchorPane.leftAnchor="149.0" AnchorPane.rightAnchor="52.0" AnchorPane.topAnchor="289.0" fx:id="address" />
</children>
<styleClass>
<String fx:value="profile" />
</styleClass>
<properties>
<elementLockSel>
<Boolean fx:value="true" />
</elementLockSel>
</properties>
</AnchorPane>
Jemand irgendwelche Ideen?
- post die ganze Ausnahme, bitte. Mit den gegebenen Parametern der code sollte funktionieren.
- Hallo Sergej, hier sind mehr details. Vielleicht können Sie mir helfen!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist in Bezug auf Ihre Vorherige Frage (JavaFX 2.0 laden der fxml-Dateien aus Unterordner schlägt fehl). Sehen diese Antwort. Hier gilt das gleiche für
processUpdate
Aktion.Gibt es ein problem in Ihrem
profile.fxml
- Datei. Sie enthält nicht die Beschreibung der Fehler, die im stacktrace, aber wahrscheinlich haben Sie falsch oder falsch geschrieben-Attribut-tag in dort.Bitte fügen Sie
profile.fxml
- und full-stack-trace der post, wenn Sie weitere Hilfe benötigen.