Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFreeChart使JFrame无响应?_Java_Swing_Swt_Jfreechart - Fatal编程技术网

Java JFreeChart使JFrame无响应?

Java JFreeChart使JFrame无响应?,java,swing,swt,jfreechart,Java,Swing,Swt,Jfreechart,当我创建JFrame时,我无法与它交互。我无法调整它的大小或单击标题按钮,尽管我可以移动窗口。甚至像这样简单的事情: JFrame win = new JFrame(); win.setVisible(true); 将显示出问题。启动应用程序时,控制台中会显示: 2015-03-17 10:06:47.261 java[1406:507] [Java CocoaComponent compatibility mode]: Enabled 2015-03-17 10:06:47.261 java

当我创建JFrame时,我无法与它交互。我无法调整它的大小或单击标题按钮,尽管我可以移动窗口。甚至像这样简单的事情:

JFrame win = new JFrame();
win.setVisible(true);
将显示出问题。启动应用程序时,控制台中会显示:

2015-03-17 10:06:47.261 java[1406:507] [Java CocoaComponent compatibility mode]: Enabled
2015-03-17 10:06:47.261 java[1406:507] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000

显然,当混合Swing和SWT组件时,可能会发生这种情况。我不使用SWT库,尽管我的项目使用JFreeChart,它包含
swtgraphics2d.jar
。在仍然使用JFreeChart的情况下,是否有办法解决此问题?

请确保使用
JFreeChart
创建一个
ChartPanel
,并
add()
将其添加到
JFrame
中。默认位置为
BorderLayout.CENTER
,这将允许图表随框架调整大小

private void display() {
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    YourDataset data = createYourDataset(…);
    JFreeChart chart = createYourChart(…);
    f.add(new ChartPanel(chart);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}
此外,请确保从上开始


当我删除了(现在已知的)不必要的jar时,问题就消失了,包括
swtgraphics2d.jar

显示创建
JFrame
的上下文。即使我在一个空的main()中创建JFrame,也会发生这种情况。您使用
javax.swing.JFrame
?很高兴它能正常工作,但是您可能想要检查您的类路径;我对
java-cp-jfreechart/lib/*:…
没有问题,它包括
jfreechart-1.0.19-swt.jar
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            new YourClass().display();
        }
    });
}