Вывод JFreeChart с помощью JFileChooser

У меня есть график JFreeChart, который я хотел бы сохранить как файл PNG из приложения Java Swing.

XYPlot plot = (XYPlot)chart.getPlot();
plot.setBackgroundPaint(new Color(255,228,196));
ChartPanel panel = new ChartPanel(chart);
setContentPane(panel);
panel.setSize(600, 300);

JFileChooser exportChooser = new JFileChooser();
exportChooser.setSelectedFile(new File("test plot"));
FileFilter filter = new FileNameExtensionFilter("PNG File","png");
exportChooser.setFileFilter(filter);
int returnVal = exportChooser.showDialog(null, "Export");
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = exportChooser.getSelectedFile();
try {
    OutputStream out = new FileOutputStream(file);
    ChartUtilities.writeChartAsPNG(out, chart, panel.getWidth(), panel.getHeight());
}catch (IOException e) {
  e.printStackTrace();
}catch (Throwable t){
  t.printStackTrace();
}
}

У меня такая ошибка:

java.lang.UnsatisfiedLinkError:
javax.imageio.ImageIO.write(Ljava/awt/image/RenderedImage;Ljava/lang/String;Ljava/io/OutputStream;)

Я не уверен, что это значит и как с этим справиться. Я также не уверен, имеет ли смысл мой код, особенно OutputStream out = new FileOutputStream(file);. Был бы очень признателен за любые идеи!

Почему не ChartUtilities.saveChartAsPNG()?

trashgod 04.11.2018 12:11

@trashgod ошибка все еще сохраняется ....

A BeauTifful Life 04.11.2018 16:47

Работает для меня; отсутствие библиотеки звучит как проблема с установкой JFreeChart, упомянутая здесь или проблема с установкой Java.

trashgod 04.11.2018 22:34

Какая у вас версия Java? Каков вывод java --version в среде выполнения, при которой вы получаете ошибку? Похоже на проблему JRE.

Harald K 05.11.2018 12:56

@haraldK java 10.0.2 Java (TM) SE Runtime Environment 18.3 (сборка 10.0.2 + 13) 64-разрядная серверная виртуальная машина Java HotSpot (TM) 18.3 (сборка 10.0.2 + 13, смешанный режим)

A BeauTifful Life 05.11.2018 15:28

Странный. Вы уверены, что модуль java.desktop является частью этой JRE? Теперь с помощью инструмента jlink можно включать / исключать модули и создавать индивидуализированную минимальную JRE именно для ваших нужд.

Harald K 05.11.2018 15:35

@haraldK Я смог немного понять ваш комментарий только после прочтения статьи о модульности Java 9 (извините за поздний ответ). Но как мне убедиться, что это часть JRE? Я также решил попробовать ImageIO, но столкнулся с ошибкой «метод не найден»; Сделал пост stackoverflow.com/questions/53230998/…. Не знаю, связано ли то, о чем вы говорили?

A BeauTifful Life 09.11.2018 19:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
76
0

Другие вопросы по теме