Ошибка при загрузке файла fxml в проекте JavaFX

Я работаю над настольным приложением, где мне нужно использовать JavaFX. Я создал файл fxml в проекте JavaFX на eclipse. Я создаю сцену в построителе сцен. Когда я пытаюсь запустить основной файл Java, изменения, внесенные с помощью построителя сцен в файл fxml, не отражаются в главном окне, и экран отображается пустым. вот мой код.

public class Main extends Application {
@Override
public void start(Stage primaryStage) {
    try {
        AnchorPane  root = new AnchorPane();

        Scene scene = new Scene(root,400,400,Color.BLACK);
        scene.getStylesheets().add(getClass().getResource("/application/sample.fxml").getPath());
        primaryStage.setTitle("FXML Welcome");

        primaryStage.setScene(scene);
        primaryStage.show();
    } catch(Exception e) {
        e.printStackTrace();
    }
}

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

И это мой код файла sample.fxml:

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>
<?scenebuilder-background-color 0x00ffa3ff?>

<AnchorPane prefHeight="379.0" prefWidth="549.0001220703125" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2">

<children>
<Button layoutX="219.0" layoutY="156.0" mnemonicParsing="false" text="hello" />
</children>
</AnchorPane>

Ошибка, которую я получил, была:

     WARNING: com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged Resource "/F:/eclipse_progs/examplefx/bin/application/sample.fxml" not found.

Но место в указанном сообщении об ошибке содержит файл, на который оно ссылается. Кто-нибудь может объяснить, в чем может быть причина ошибки. Это с кодом или с проблемами плагина?


person Coder 477    schedule 20.03.2014    source источник
comment
Это потому, что вы неправильно загружаете файл fxml. вы должны использовать FXMLLoader для загрузки файла fxml. scene.getStyleSheets() используется для загрузки только файлов css.   -  person AJJ    schedule 20.03.2014


Ответы (2)


В JavaFX, если вы хотите загрузить файл fxml, используйте FXMLLoader как,

FXMLLoader.load(getClass().getResource("application/sample.fxml"));

Чтобы загрузить таблицу стилей, используйте as.

scene.getStlyeShees().add(getClass().getResource("application/sample.css").toExternalForm);

В вашем коде вы добавляете файл fxml в список таблиц стилей сцены, что неверно. Попробуйте использовать FXMLLoader, как сказано выше, чтобы загрузить файл fxml.

См. документы: http://docs.oracle.com/javafx/2/get_started/fxml_tutorial.htm

person AJJ    schedule 20.03.2014

Попробуйте этот метод запуска и поместите свой каталог application/<NAME>.fxml в тот же каталог, где ваши Main.class файлы fxml загружаются с помощью статического метода FXMLLoader.load() с getStylesheets.add(...), вы можете добавить файлы .css в свою сцену.

    @Override
    public void start(Stage primaryStage) throws IOException {

        Parent parent = FXMLLoader.load(getClass().getResource("application/demo.fxml"));
        Scene scene = new Scene(parent);
        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
person Patrick    schedule 20.03.2014