Отображение сцены JavaFX случайно задерживается

Я создал приложение JavaFX (работающее в Ubuntu, Java(TM) SE Runtime Environment (сборка 1.8.0_131-b11)) и сделал простое тестовое приложение:

  public class DelayedSceneApplication extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("Test");
        primaryStage.setResizable(false);

        // Root.
        BorderPane root = new BorderPane();
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);

        // Buttons box.
        HBox buttonBox = new HBox();
        buttonBox.setPadding(new Insets(10));
        buttonBox.getChildren().addAll(new Button("Test"));

        root.setBottom(buttonBox);
        primaryStage.show();
    }
  }

Проблема в том, что иногда после показа сцены сцена не загружается. Иногда для отображения кнопки требуется одна секунда, иногда более 20 секунд. Когда сцена еще не была показана, и при нажатии на сцену кнопка отображается немедленно. Опять же, иногда кнопка отображается правильно при запуске. Происходит это, как упоминалось, случайно. Чтобы воспроизвести это поведение, необходимо несколько раз перезапустить приложение. Где я сделал ошибку? Это ошибка? Возможно, это невозможно воспроизвести в другой среде (Windows, другая версия JAVA, ...)?

Большое спасибо!

Обновление: вывод с параметром -Dprism.verbose=true:

Prism pipeline init order: es2 sw 
Using java-based Pisces rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.es2.ES2Pipeline
Loading ES2 native library ... prism_es2
    succeeded.
GLFactory using com.sun.prism.es2.X11GLFactory
(X) Got class = class com.sun.prism.es2.ES2Pipeline
Initialized prism pipeline: com.sun.prism.es2.ES2Pipeline
Maximum supported texture size: 16384
Maximum texture size clamped to 4096
Non power of two texture support = true
Maximum number of vertex attributes = 16
Maximum number of uniform vertex components = 16384
Maximum number of uniform fragment components = 16384
Maximum number of varying components = 128
Maximum number of texture units usable in a vertex shader = 32
Maximum number of texture units usable in a fragment shader = 32
Graphics Vendor: Intel Open Source Technology Center
       Renderer: Mesa DRI Intel(R) Kabylake GT2 
        Version: 3.0 Mesa 17.0.3
 vsync: true vpipe: true
ES2ResourceFactory: Prism - createStockShader: FillPgram_Color.frag
new alphas
ES2ResourceFactory: Prism - createStockShader: Texture_Color.frag
ES2ResourceFactory: Prism - createStockShader: Texture_LinearGradient_PAD.frag
ES2ResourceFactory: Prism - createStockShader: Solid_TextureRGB.frag
ES2ResourceFactory: Prism - createStockShader: Solid_TextureFirstPassLCD.frag
ES2ResourceFactory: Prism - createStockShader: Solid_TextureSecondPassLCD.frag

person Rolch2015    schedule 25.07.2017    source источник
comment
Это похоже на проблему, связанную с графикой. Не могли бы вы включить вывод запуска вашей программы с помощью -Dprism.verbose=true? Вы также можете попробовать обновить графические драйверы или отключить аппаратное ускорение с помощью -Dprism.order=sw, чтобы посмотреть, поможет ли это.   -  person Itai    schedule 25.07.2017
comment
@sillyfly Большое спасибо, это решило проблему. Тем не менее, я разрушил свою ОС при обновлении драйвера графической карты, поэтому поздний ответ, но это другая проблема. Эта проблема пока возникает только с JavaFX, я не видел других приложений с такой же проблемой. Поэтому мне интересно, почему только у JavaFX есть эта проблема? Стоит ли включать стандартную опцию -Dprism.order=swas при упаковке приложения, чтобы гарантировать, что оно работает везде? Или это обескураживает? Вы можете опубликовать свой комментарий как ответ на этот вопрос, после чего я могу отметить его как правильный. Еще раз спасибо!   -  person Rolch2015    schedule 27.07.2017
comment
-Dprism.order=sw полностью отключает аппаратное ускорение, поэтому производительность будет страдать — в лучшем случае это обходной путь, но, вероятно, его следует использовать только для диагностики. На мой взгляд, включать его в качестве варианта выпуска по умолчанию — не лучшая идея. Вы должны попытаться найти основную причину, чтобы действительно решить ее, однако я не совсем уверен, как это сделать. Включение вывода при работе с -Dprism.verbose=true (но без order=sw) может дать дополнительные подсказки.   -  person Itai    schedule 27.07.2017
comment
@sillyfly Я обновил вопрос выводом при запуске -Dprism.verbose=true   -  person Rolch2015    schedule 27.07.2017
comment
Я не вижу ничего плохого, но я не эксперт. Изменяется ли этот вывод каким-либо образом при возникновении ошибочного поведения по сравнению с нормальным запуском? Кроме того, поскольку вы работаете в Linux, используете ли вы драйвер KMS Intel? Иногда использование KMS вместо KMS (или наоборот) может решить некоторые проблемы.   -  person Itai    schedule 27.07.2017
comment
@sillyfly Нет никакой разницы между выводом. Я попробую это в другое время с другой средой. В настоящее время я использую драйвер nvidia-384 с опцией Intel, ранее я использовал стандартный драйвер nouveau. Оба показывают одинаковое поведение. Тем не менее, это определенно проблема, связанная с графической картой. Поэтому ваш ответ должен быть принятым.   -  person Rolch2015    schedule 27.07.2017
comment
@sillyfly Если вы опубликуете свой ответ, я могу пометить этот вопрос как решенный.   -  person Rolch2015    schedule 22.01.2018