亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

由于 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

http://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源

http://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 關注
  • 254 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號