Невозможно открыть ДИСПЛЕЙ с помощью JavaFX на сервере UbuntuJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Невозможно открыть ДИСПЛЕЙ с помощью JavaFX на сервере Ubuntu

Сообщение Anonymous »


У меня есть простое приложение, которое генерирует PNG-диаграмму на основе JavaFX. Приложение не запускается на компьютере без дисплея, за следующим исключением: мне не нужно визуализировать или отображать содержимое на консоли, нужно просто создать изображение.

"main" java.lang.UnsupportedOperationException: невозможно открыть ДИСПЛЕЙ по адресу com.sun.glass.ui.gtk.GtkApplication.(GtkApplication.java:68) на com.sun.glass.ui.gtk.GtkPlatformFactory.createApplication(GtkPlatformFactory.java:41) на com.sun.glass.ui.Application.run(Application.java:146) на com.sun.javafx.tk.quantum.QuantumToolkit.startup(QuantumToolkit.java:257) на com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:211) в javafx.embed.swing.JFXPanel.initFx(JFXPanel.java:215) в javafx.embed.swing.JFXPanel.(JFXPanel.java:230) Я пытаюсь запустить это на экземпляре AWS. Есть ли способ преодолеть эту проблему? Ниже приведен пример моего кода.

import javafx.application.Platform; импортировать javafx.collections.FXCollections; импортировать javafx.collections.ObservableList; импортировать javafx.embed.swing.JFXPanel; импортировать javafx.embed.swing.SwingFXUtils; импортировать javafx.scene.Scene; импортировать javafx.scene.chart.PieChart; импортировать javafx.scene.image.WritableImage; импортировать javafx.stage.Stage; импортировать java.io.File; импортировать java.io.IOException; импортировать java.nio.file.Paths; импортировать javax.imageio.ImageIO; тест публичного класса { public static void main(String[] args) { СтрокаchartGenLocation = "/Users/tmp"; новый JFXPanel(); ObservableList pieChartData = FXCollections.observableArrayList( новый PieChart.Data("Ошибка", 10), new PieChart.Data("Пропущено", 20)); окончательная круговая диаграмма = новая круговая диаграмма (pieChartData); диаграмма.setAnimated(ложь); Platform.runLater(() -> { Этап этап = новый этап(); Сцена сцены = новая сцена(диаграмма, 500, 500); stage.setScene(сцена); WritableImage img = новый WritableImage (500, 500); сцена.снимок(изображение); Файл файл = новый файл(Paths.get(chartGenLocation, "a.png").toString()); пытаться { ImageIO.write(SwingFXUtils.fromFXImage(img, null), "png", файл); } catch (IOException e) { //logger.error("Произошла ошибка при записи изображения графика } }); } } Я видел несколько ответов SO, в которых в основном говорилось о монокле и testfx, здесь я не могу добавлять внешние зависимости. Поэтому добавление testfx не вариант. Я также пробовал следующее с xvbf, что приводило к зависанию системы:

Xvfb :95 -screen 0 1024x768x16 &> xvfb.log & экспорт DISPLAY=:95.0 При выполнении я вижу следующий вывод, и система зависает.

(process:13112): Gtk-WARNING **: локаль не поддерживается библиотекой C. Использование резервной локали «C». Предупреждение Fontconfig: игнорирование UTF-8: недопустимый тег региона Обновить

Последовательность выполнения

Xvfb :92 -screen 0 1024x768x16 &> xvfb.log & экспорт DISPLAY=:92.0 В xvbf.log ошибок нет, кажется, запускается правильно.

Тест Java Я вижу следующее в консоли

(process:13356): Gtk-WARNING **: локаль не поддерживается библиотекой C. Использование резервной локали «C». Предупреждение Fontconfig: игнорирование UTF-8: недопустимый тег региона Я не вижу никаких журналов в xvbf.log, после приведенного выше журнала выполнение не продолжается. Мое изображение не создается.

Обновление 2

Я хотел бы знать, есть ли способ обойти эту проверку, поскольку мне действительно не нужна визуализация дисплея.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»