Чтобы избежать таких аномалий, убедитесь, что вы создаете и манипулируете объектами Swing GUI only в потоке событий диспетчеризации . Как отмечалось здесь , «программа может отображаться для правильной работы, только с загадочным сбоем в другой среде». Для справки, я изменил ваш пример соответственно.
![pie chart](https://i.stack.imgur.com/UN9Cx.png)
$ javac -cp .:$JFC JFreeChartPie.java && "$JRE" -cp .:$JFC JFreeChartPie
import java.awt.EventQueue;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
public class JFreeChartPie {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
System.out.println("piechart");
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Category 1", 43.2);
dataset.setValue("Category 2", 27.9);
dataset.setValue("Category 3", 79.5);
JFreeChart chart = ChartFactory.createPieChart(
"Sample Pie Chart", dataset, true, true, false);
ChartFrame frame = new ChartFrame("Title", chart);
frame.pack();
frame.setSize(400, 400);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}