错误:java.lang.IllegalArgumentException

时间:2015-07-27 08:49:05

标签: java

以下代码出错: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!");
        }
    }
}

3 个答案:

答案 0 :(得分:2)

您无法将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,例如: - < / p>

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

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

pang.setLayout(null); 

否则你需要自己设定界限。所以只需评论这一行。

答案 1 :(得分:1)

尝试运行此示例。您的代码中存在大量问题。

您正在为自己添加组件

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!");
        }
    }
}

答案 2 :(得分:1)

IllegalArgumentException 是未经检查的例外。

它由API Developer或Programmer明确提出,表明方法已使用非法参数调用。

示例:

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

输出:

RuntimeException: IllegalArgumentExcepion

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