2015-11-30 5 views
0

Привет, я использую javaFx, и я новичок в нем. Мне нужна помощь в этом. во время запуска основного приложения. Я получаю ошибку javafx.fxml.LoadException:LoadException при загрузке файла fxml

Пожалуйста, помогите.

Код: Основной код

package mainApp; 


import controller.LoginController; 
import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.layout.AnchorPane; 

public class Main extends Application { 
    @Override 
    public void start(Stage primaryStage) { 
     try { 
      //Create a loader for the UI components 
      FXMLLoader loader = new FXMLLoader(); 
        loader.setLocation(Main.class.getResource("/view/loginFx.fxml")); 
      //Inflate the view using the loader 
      AnchorPane root = (AnchorPane) loader.load(); 
      //Set window title 
      primaryStage.setTitle("Welcome"); 
      //Create a scene with the inflated view 
      Scene scene = new Scene(root); 
      //Set the scene to the stage 
      primaryStage.setScene(scene); 
      //Get the controller instance from the loader 
      LoginController controller = loader.getController(); 
      //Set the parent stage in the controller 
      controller.setDialogStage(primaryStage); 
      //Show the view 
      primaryStage.show(); 
     } catch(Exception e) { 
      //System.out.println("Error occured while inflating view: " + e); 
      e.printStackTrace(); 
     } 
    } 


    public static void main(String[] args) { 
     launch(args); 
    } 
} 

FXML Файл

<?xml version="1.0" encoding="UTF-8"?> 

<?import java.net.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.text.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="login.controller.LoginController"> 
    <children> 
     <Label layoutX="113.0" layoutY="102.0" text="UserName" /> 
     <Label layoutX="116.0" layoutY="173.0" text="Password" /> 
     <TextField fx:id="UserName" layoutX="200.0" layoutY="98.0" /> 
     <Button layoutX="242.0" layoutY="251.0" mnemonicParsing="false" onAction="#loginbutton" text="Login" /> 
     <Text fx:id="username" layoutX="200.0" layoutY="400.0" /> 
     <PasswordField layoutX="200.0" layoutY="169.0" /> 
     <Label layoutX="54.0" layoutY="45.0" prefHeight="17.0" prefWidth="130.0" text="Welcome" /> 
    </children> 

</AnchorPane> 

Контроллер:

package controller; 


//import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.control.TextField; 
//import javafx.scene.text.Text; 
import javafx.stage.Stage; 
import javafx.stage.WindowEvent; 

import model.Login; 
import dao.UserDao; 

public class LoginController { 
    //This is the parent stage 
     private Stage dialogStage; 

     //This is the Text box element in the view for name of bank 
     @FXML 
     private TextField username; 
     //Method to set the parent stage of the current view 
     public void setDialogStage(Stage dialogStage) { 
      this.dialogStage = dialogStage; 
     } 
     public void loginbutton() { 
      //Extract the data from the view elements 
      String username = this.username.getText(); 
     // String address = this.address.getText(); 
      //Validate the data 
      if(username == null || username.trim().equals("")) { 
       return; 
      } 

     Login login = new Login(); 
     login.setName(username); 
     UserDao u = new UserDao(); 
     u.create(login); 
     close(); 
     } 

     private void close() { 
      dialogStage.fireEvent(new WindowEvent(dialogStage,WindowEvent.WINDOW_CLOSE_REQUEST)); 
     } 

    } 

Пожалуйста, скажите мне, что это проблема я получаю следующее сообщение об ошибке: javafx.fxml.LoadException:/C:/Users/Neel-Megha/workspace/User/bin/view/loginFx.fxml:11

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) 
at javafx.fxml.FXMLLoader.access$700(FXMLLoader.java:103) 
at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:922) 
at javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:971) 
at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:220) 
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:744) 
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) 
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409) 
at mainApp.Main.start(Main.java:19) 
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863) 
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326) 
at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295) 
at java.security.AccessController.doPrivileged(Native Method) 
at 

com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(WinApplication.java:191) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.ClassNotFoundException: login.controller.LoginController 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:920) 
    ... 17 more 

ответ

0

Трассировка стека говорит вам проблему:

Caused by: java.lang.ClassNotFoundException: login.controller.LoginController

Вы объявленную контроллер в файле FXML как fx:controller="login.controller.LoginController", поэтому FXMLLoader ищет класс LoginController в пакете login.controller. Тем не менее, ваш LoginController класс объявляет это в controller пакете:

package controller ; 

// ... 

public class LoginController { ... } 

Таким образом, вы должны изменить FXML читать fx:controller="controller.LoginController".

(Там могут быть и другие ошибки в коде:. Это один вызывает ошибку, вас в курсе)


Как и в сторону, вам не нужно весь код, провода ваш Stage экземпляр в контроллер. Просто сделайте

private void close() { 
    username.getScene().getWindow().hide(); 
} 

и теперь вы можете избавиться от dialogStage и метода setDialogStage() из LoginController, и вы можете удалить линии

LoginController controller = loader.getController(); 
controller.setDialogStage(primaryStage); 

из Main.

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