由于Gradle,Intellij(Swing)GUI没有编译

问题描述 投票:0回答:2

我有一个Gradle项目,我正在尝试创建一个GUI(Swing,使用Intellij);但是,我一直收到编译错误。完全相同的GUI代码可以在标准Java项目上运行并编译得很好。

GUI

package gui;
import javax.swing.*;

public class ApplicationGUI {
    private JPanel rootPanel;
    private JLabel testLabel;

    public static void main(String[] args) {
        JFrame frame = new JFrame("ApplicationGUI");
        frame.setContentPane(new ApplicationGUI().rootPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
}

摇篮

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    compile 'ca.uhn.hapi.fhir:hapi-fhir-base:3.7.0'
    compile 'ca.uhn.hapi.fhir:hapi-fhir-structures-dstu3:3.7.0'
    compile 'ca.uhn.hapi.fhir:hapi-fhir-client:3.7.0'
}

错误

任务:ApplicationGUI.main()FAILED线程“main”中的异常java.awt.IllegalComponentStateException:contentPane不能设置为null。 at javax.swing.JRootPane.setContentPane(JRootPane.java:621)at javax.swing.JFrame.setContentPane(JFrame.java:698)at gui.ApplicationGUI.main(ApplicationGUI.java:11)

在我的设置中,我将GUI Designer设置为Java源代码。

我究竟做错了什么?

干杯

EDIT1

我可以确认上面的代码使用Maven 100%正常工作..

java swing user-interface gradle intellij-idea
2个回答
0
投票

正如评论中所提到的,你的rootPanel永远不会被初始化,因此它是null。 JFrame默认情况下已经有一个jpanel contentPane,因此您不需要以下行,除非您打算替换它:

frame.setContentPane(new ApplicationGUI().rootPanel);

public void setContentPane(Container contentPane)

设置contentPane属性。此方法由构造函数调用。 Swing的绘画架构需要在包含层次结构中使用不透明的JComponent。这通常由内容窗格提供。如果替换内容窗格,建议您使用不透明的JComponent替换它。

下面是一些示例代码,用于创建框架并为其添加标签。

public class ApplicationGUI{
    public static void main(String[] args) {
        JLabel aLabel = new JLabel("some text");
        JFrame frame = new JFrame("ApplicationGUI");
        frame.getContentPane().add(aLabel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,300);
        frame.setVisible(true);
    }
}

0
投票

这似乎是Gradle和Intellij之间的问题。解决方案是迁移到Maven。用于GUI的.form文件(由Intellij生成)应该在frame.setContentPane(new ApplicationGUI().rootPanel);行初始化,但这不会发生。使用Maven时没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.