-3
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class JfreeChartPie {

    System.out.println("piechart");

    public static void main(String[] args) {

        System.out.println("piechart");
        // TODO Auto-generated method stub
        // create a dataset...
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("Category 1", 43.2);
        dataset.setValue("Category 2", 27.9);
        dataset.setValue("Category 3", 79.5);
        // create a chart...
        JFreeChart chart = ChartFactory.createPieChart(
        "Sample Pie Chart",
        dataset,
        true,
        // legend?
        true,
        // tooltips?
        false
        // URLs?
        );
        // create and display a frame...
        ChartFrame frame = new ChartFrame("First", chart);
        //frame.pack();
        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}

我运行 debian 9 gnu linux 和 eclipse 2018-09 我从控制台得到的只是关于 jfreechart 许可证的文本,它似乎没有执行代码。我没有问题。

4

1 回答 1

1

为避免此类异常,请确认您事件分派线程上构造和操作 Swing GUI 对象。如此处所述,“程序可能看起来正常工作,但在不同的环境中却神秘地失败了。” 作为参考,我已相应地修改了您的示例。

饼形图

$ 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);
            }
        });
    }
}
于 2019-01-06T13:32:20.503 回答