猿问

由于 Gradle,Intellij (Swing) GUI 无法编译

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


图形用户界面


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'

}

错误


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


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


我究竟做错了什么?


干杯


编辑1:


我可以确认上面的代码在 Maven 中 100% 正常工作。


噜噜哒
浏览 196回答 4
4回答

交互式爱情

通过更改 intellij 设置解决:我检查过:自动导入...使用 -set -intellij 构建和运行使用 -set -intellij 运行测试Gradle JVM - 设置 - 使用项目JDK我的代码是:package com.mygdx.game.desktop;import javax.swing.*;import com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas;import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;import com.mygdx.game.MyGdxGame;import java.awt.*;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;public class MainForm {    private JPanel mainpanel_1;    private JPanel visualizationPanel_1;    private JButton button1;    private static MyGdxGame visualization;    private JFrame mainFrame;    public MainForm(JFrame frame) {        mainFrame = frame;    }    public static void main(String[] args) throws ClassNotFoundException, UnsupportedLookAndFeelException, InstantiationException, IllegalAccessException {        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());        SwingUtilities.invokeLater(() -> {            JFrame frame = new JFrame("My First Swing Example");            frame.setResizable(false);            frame.setMinimumSize(new Dimension(1300, 850));            frame.setSize(1300, 850);            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);            MainForm mf = new MainForm(frame);            if(mf.mainpanel_1 != null) {                frame.setContentPane(mf.mainpanel_1);            }            visualization = new MyGdxGame();            LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();            config.width = 1200;            config.height = 800;            config.forceExit = false;            config.resizable = false;            LwjglAWTCanvas lwjglCanvas = new LwjglAWTCanvas(visualization, config);            mf.visualizationPanel_1.add(lwjglCanvas.getCanvas());            frame.addWindowListener(new WindowAdapter() {                @Override                public void windowClosing(WindowEvent windowEvent) {                    lwjglCanvas.stop();                    System.exit(0);                }            });            frame.pack();            // Setting the frame visibility to true            frame.setVisible(true);        });    }}

ABOUTYOU

只是将执行从 Gradle 更改为 Intellij 并不能解决主要问题,因为在构建 Gradle jar 时它将继续不起作用。我执行了以下操作来解决问题并继续使用 Gradle。进入Editor -> GUI Designer -> Generate GUI into,选择Java源将 Intellij 表单依赖项添加到您的 gradle 项目implementation 'com.intellij:forms_rt:7.0.3'转到编辑器的 GUI 并进行一些更改(例如创建新组件或更改标签),这样 Intellij 将生成必要的代码。运行主类

喵喔喔

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

阿晨1998

如评论中所述,您的 rootPanel 从未初始化,因此它为空。默认情况下,JFrame 已经有一个 jpanel contentPane,因此您实际上并不需要以下行,除非您打算替换它:frame.setContentPane(new ApplicationGUI().rootPanel);公共无效 setContentPane(容器内容窗格)设置 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);    }}
随时随地看视频慕课网APP

相关分类

Java
我要回答