2015-01-08 2 views
5

Я пытаюсь написать приложение javaFx с несколькими изображениями внутри окна.
Короче говоря, у меня есть класс enum с именем Candy, и у каждой конфеты есть некоторые свойства и путь к файлу изображения, представляющему его.
В конструкторе моего javafx.application класса (Table) Я хочу, чтобы заполнить список массива с этими изображениями, так что я написал это до сих пор:
Внутренняя графика еще не инициализирована: javafx

public class Table extends Application { 

    ArrayList<Image> images; 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     primaryStage.setTitle("CandyFx"); 
     primaryStage.show(); 
    } 

    public Table() { 
     images = new ArrayList<Image>(); 
     for (Candy candy : Candy.values()) { 
      File file = new File (candy.getImagePath()); 
      Image image = new Image(file.toURI().toString()); 
      images.add(image); 
     } 
    } 
} 

Теперь каждый раз, когда я хочу, чтобы создать экземпляр Table класс, приложение выбрасывает java.lang.RuntimeException: Internal graphics not initialized yet.
Как я могу получить начальную графику, которая кажется, что я этого не сделал?

+0

Показать похожие комментарии в системе отслеживания проблем JavaFX: [RT-30796 Невозможно создать JavaFX изображение до «Внутренняя графика» не инициализируются] (https://javafx-jira.kenai.com/browse/RT-30796). – jewelsea

+1

Кроме того, вы никогда не должны вручную создавать экземпляр класса Table (например, никогда не писать 'new Table()'). Экземпляр таблицы будет создан приложением Java launcher - см. [Документацию по JavaFX Application] (http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html) для получения подробной информации о приложении JavaFX жизненный цикл. Также обратите внимание, что [приложение JavaFX нельзя запускать более одного раза] (http://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#launch-java.lang.String .. .-). – jewelsea

+0

@jewelsea Спасибо. но что, если я хочу иметь какие-то специальные методы в своем приложении (например, метод, изменяющий положение чего-либо на экране), который я хочу вызвать из другой функции? (потому что я не могу вызывать метод в моем созданном экземпляре) – AliLotfi

ответ

4

Прежде всего, если вы используете Linux, GTK 2,18 требуется для запуска JavaFX .try установить

libswt-gtk-3-java 

Это исключение будет брошено всякий раз, когда ваш экран пустой .Try для создания изображений внутри start метода. Незадолго до primaryStage.show();.

Посмотрите на эту ссылку слишком

http://cr.openjdk.java.net/~vadim/RT-33475/webrev.00/modules/graphics/src/main/java/com/sun/glass/ui/Screen.java.html

0

Я понятия не имею, как это точно работает, но когда мы сначала создаем JFXPanel в нашем начале мы не получаем ошибки больше.

JFXPanel jfxPanel = new JFXPanel(); 
+0

он неявно запускает поток приложений fx – kleopatra

Смежные вопросы