2014-03-20 3 views
2

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

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. 

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

+0

Его потому, что вы загружаете файл FXML в неправильном направлении. вы должны использовать FXMLLoader для загрузки файла fxml. scene.getStyleSheets() используется для загрузки только файлов css. – AJJ

ответ

3

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

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

Для загрузки использовать таблицы стилей как.

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

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

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

4

Попробуйте этот метод запуска и поместите каталог 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(); 
    } 
Смежные вопросы