2016-06-01 21 views
0

Ich habe ein Problem mit Javafx. Ich habe meine fxml-Datei in SceneBuilder erstellt und im selben Verzeichnis mit dem Paketordner abgelegt. hier sind Codes:JavaFx Fehler beim Ausführen

public class Main extends Application { 



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

@Override 
public void start(Stage window) throws Exception { 
    Pane mainPane = (Pane)FXMLLoader.load(Main.class.getResource("../sas.fxml")); 


    Scene scene = new Scene(mainPane); 
    window.setScene(scene); 
    window.show(); 
} 
} 

, wenn ich dies führen Sie es mir diesen Fehler gibt:

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$152(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$50/1323468230.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: javafx.fxml.LoadException: 
/H:/Java%20projects/JavaFx/bin/sas.fxml:7 

at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source) 
at javafx.fxml.FXMLLoader.access$700(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.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
at javafx.fxml.FXMLLoader.load(Unknown Source) 
at javafx.Main.start(Main.java:20) 
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(Unknown Source) 
at com.sun.javafx.application.LauncherImpl$$Lambda$53/1393559157.run(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(Unknown Source) 
at com.sun.javafx.application.PlatformImpl$$Lambda$46/186276003.run(Unknown Source) 
at com.sun.javafx.application.PlatformImpl.lambda$null$170(Unknown Source) 
at com.sun.javafx.application.PlatformImpl$$Lambda$48/200091476.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(Unknown Source) 
at com.sun.javafx.application.PlatformImpl$$Lambda$47/237061348.run(Unknown Source) 
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
at com.sun.glass.ui.win.WinApplication.lambda$null$145(Unknown Source) 
at com.sun.glass.ui.win.WinApplication$$Lambda$36/2117255219.run(Unknown Source) 
... 1 more 
Caused by: java.lang.ClassNotFoundException: MyController 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 28 more 
Exception running application javafx.Main 

i Lösung Online gesucht, die meisten von ihnen sagt, dass Problem mit URL sein kann. Aber wie du im ersten Code siehst, habe ich es geschrieben wie (../sas.fxml), weil es sich nicht im gleichen Ordner mit Java-Dateien befindet, sondern im selben Ordner mit dem Paketordner. also irgendeine Idee, wie man es löst? freuen uns über jede Lösung

FXML Datei

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

<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 

<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="185.0" prefWidth="349.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="MyController"> 
    <children> 
     <TextField fx:id="username" layoutX="44.0" layoutY="35.0" promptText="username" /> 
     <Button fx:id="login" layoutX="224.0" layoutY="35.0" mnemonicParsing="false" onAction="#loginFucntion" text="Login" /> 
    </children> 
</Pane> 

MyController.java

package javafx; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 

public class MyController { 

    @FXML 
    private Button login; 

    @FXML 
    private TextField username; 

    @FXML 
    void loginFucntion(ActionEvent event) { 

    } 

} 
+0

Können Sie die FXML-Datei posten? –

+0

Poste es nicht in einem Kommentar, es ist nicht lesbar. [Bearbeiten] Ihre Frage, um es aufzunehmen. –

+0

Also haben Sie eine MyController-Klasse im Standardpaket? –

Antwort

2

Das fx:controller Attribut geworfen werden erfordert die voll qualifizierten Namen der Klasse. Da Sie MyController in einem Paket mit der Bezeichnung javafx platziert haben (das übrigens nicht: das ist ein geschützter Paketname, also sollten Sie etwas anderes wählen, das spezifisch für Ihr Unternehmen/Organisation usw. ist), würden Sie

benötigen
fx:controller="javafx.MyController" 

Da Sie nur fx:controller="MyController" angegeben, die FXMLLoader sucht in dem Standard-Paket (dh in der Wurzel des classpath) für eine Klasse MyController genannt. Da es dort nicht gefunden werden kann (es ist in einem anderen Paket), gibt es Ihnen eine ClassNotFoundException.

+0

danke Mann endlich gelöst.) – user3557576

0

Betrachten Sie diese Linie /H:/Java%20projects/JavaFx/bin/sas.fxml:7

Ich denke, der Ordnername "Java-Projekte". Versuchen Sie es in "JavaProjects" oder "Java_projects" umzubenennen. Das Leerzeichen wird in% 20 umgewandelt, die die java.lang.ClassNotFoundException bewirkt

+0

versucht, aber immer noch gleichen Fehler. vielleicht habe ich fxml file nicht in das richtige verzeichnis gespeichert? – user3557576

+0

Ich glaube nicht, dass das stimmt. Der FXMLLoader liest die FXML-Datei deutlich, weil er weiß, dass er nach der MyController-Klasse suchen soll. So hat es eindeutig die FXML-Datei gefunden. –

+0

@James_D dann hast du irgendeine idee warum hat es solch einen fehler gegeben? – user3557576