错误:java.lang.IllegalArgumentException

lvjbypge  于 2023-06-04  发布在  Java
关注(0)|答案(4)|浏览(222)

以下代码中的错误是:java.lang.IllegalArgumentException: adding container's parent to itself.
这就是代码:

public class humev extends JFrame implements ActionListener{

    //Dichiarazione variabili e costanti

    private static final int larghezza = 1300;
    private static final int altezza = 1000;
    private static final String nome = "Human Evolution";

    private JLabel lab;
    private JButton gioca;
    private JPanel pang;

        public humev(){

            try{
                pang = new JPanel();
                gioca = new JButton("Gioca!");
                gioca.addActionListener(this);
                lab = new JLabel();

                gioca.add(gioca);
                lab.add(lab);
                pang.setLayout(null);
                }
            catch(Exception e1){
                System.err.println(e1);
                System.err.println("Impossibile caricare il frame di gioco!");
                }
        }

    public static void main(String[] args) {

        //Finestra
        try{
            humev h = new humev();

            JFrame finestra = new JFrame(nome);

            Dimension dim_finestra = new Dimension(larghezza, altezza);

            finestra.setPreferredSize(dim_finestra);
            finestra.setMaximumSize(dim_finestra);
            finestra.setResizable(false);
            finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            finestra.pack();
            finestra.setVisible(true);

        }
        catch(Exception e2){
            System.err.println(e2);
            System.err.println("Impossibile caricare la finestra. Frame non caricato");
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == gioca){
            lab.setText("Gioco avviato con successo!");
        }
    }
}
lmvvr0a8

lmvvr0a81#

不能将label添加到label中:-

lab.add(lab);

Aldo你不能在button上添加button:-

gioca.add(gioca);

尝试将它们添加到JPanelContentPane,而不是像这样:-

pang.add(gioca);
pang.add(lab);
getContentPane().add(pang);

编辑:-

要显示JFrame,您需要首先将JPanel添加到JFrame,然后将JFrame的可见性设置为true,如下所示:-

finestra.add(pang); // add panel to frame
finestra.setVisible(true); // show frame visibility to true

也不要将布局设置为null:-

pang.setLayout(null);

否则,您需要自己设置边界。注解这一行。

50few1ms

50few1ms2#

试着运行这个例子。在你的代码中有一堆问题。
正在将组件添加到自身

gioca.add(gioca); // don't do this

使用布局.不要使用null

pang.setLayout(null); // don't do this .use layouts .and even if you use null then
//use bounds to absolutely position .if you use null layout and if you add using `.add()` 
//then you will not see those components .

完全码

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class humev extends JFrame implements ActionListener {

    private static final int larghezza = 1300;
    private static final int altezza = 1000;
    private static final String nome = "Human Evolution";

    private final JLabel lab;
    private final JButton gioca;
    private final JPanel pang;

    public humev() {
        super(nome);

        pang = new JPanel();
        //pang.setLayout(new FlowLayout()); // use appropriate layout .for example flowlayout.since flowlayout is default layout for jpanel you can avoid it.but don't use null
        gioca = new JButton("Gioca!");
        gioca.addActionListener(this);
        lab = new JLabel("lable");

        pang.add(gioca);
        pang.add(lab);
        add(pang); // add pang panel to frame
        Dimension dim_finestra = new Dimension(larghezza, altezza);

        setPreferredSize(dim_finestra);
        setMaximumSize(dim_finestra);
        //setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true); 
        pack();

    }

    public static void main(String[] args) {
        humev humev = new humev();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == gioca) {
            lab.setText("Gioco avviato con successo!");
        }
    }
}
wpx232ag

wpx232ag3#

IllegalArgumentException为Unchecked Exception。

它由API开发人员或程序员显式引发,以指示使用非法参数调用的方法。
示例:

Thread t = new Thread();
t.setPriority(15);

输出:

RuntimeException: IllegalArgumentExcepion

Thread优先级的有效范围是1到10,如果我们试图用任何其他值设置优先级,那么我们将得到IllegalArgumentException。

vi4fp9gy

vi4fp9gy4#

你应该在lib文件夹中添加你的mysql连接器jar文件。就这样

相关问题