为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

噜噜哒 2022-10-20 17:33:51
我有一个 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% 正常工作。
查看完整描述

4 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

通过更改 intellij 设置解决:

我检查过:

  • 自动导入...

  • 使用 -set -intellij 构建和运行

  • 使用 -set -intellij 运行测试

  • Gradle JVM - 设置 - 使用项目JDK

//img1.sycdn.imooc.com//6351161d000166e810150711.jpg

我的代码是:


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);

        });

    }



}


查看完整回答
反对 回复 2022-10-20
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

只是将执行从 Gradle 更改为 Intellij 并不能解决主要问题,因为在构建 Gradle jar 时它将继续不起作用。

我执行了以下操作来解决问题并继续使用 Gradle。

进入Editor -> GUI Designer -> Generate GUI into,选择Java源

//img1.sycdn.imooc.com//635116300001183504580247.jpg

将 Intellij 表单依赖项添加到您的 gradle 项目

implementation 'com.intellij:forms_rt:7.0.3'

转到编辑器的 GUI 并进行一些更改(例如创建新组件或更改标签),这样 Intellij 将生成必要的代码。

运行主类


查看完整回答
反对 回复 2022-10-20
?
喵喔喔

TA贡献1735条经验 获得超5个赞

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



查看完整回答
反对 回复 2022-10-20
?
阿晨1998

TA贡献2037条经验 获得超6个赞

如评论中所述,您的 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);

    }

}


查看完整回答
反对 回复 2022-10-20
  • 4 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信