2012-05-01 213 views
0
@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; 
    }} 

所以我想使用FXML登錄示例的示例,只有我給了fxml的其他方式。在fxml文件中,我給了控制器。JavaFX 2.0 FXML資源加載錯誤

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) 

登錄控制器類

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."); 
     } 
    } 
} 

併線28:

if(!App.getInstance().userLogging(userId.getText(), password.getText())){ 

我提到的FXML文件是在另一個文件夾中的主文件夾。我不明白爲什麼我在使用Oracle給出的例子時遇到此錯誤,但是使用了另一個文件夾結構!

我的應用程序文件夾結構:

  • 主要
  • 型號
  • 安全
  • skinFolder - CSS
  • skinFolder - FXML
  • skinFolder - 控制器

這裏是profile.fxml代碼:

<?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> 

任何任何想法?

+1

請發佈整個例外。給定的參數你的代碼應該工作。 –

+0

嗨,謝爾蓋,這裏有更多的細節。也許你可以幫助我! –

回答

0

您的profile.fxml文件存在問題。你沒有在stacktrace中包含錯誤描述,但很可能你有錯誤或拼寫錯誤的屬性標記。

如果您需要更多幫助,請將profile.fxml和完整堆棧跟蹤添加到帖子中。

+0

我編輯了我的問題,那是堆棧錯誤!這個錯誤似乎來自內部onAction的行,例如: