setTitle方法中的异常

时间:2011-12-05 16:33:44

标签: java exception method-overriding

我目前正在开发自己的扫雷艇。在覆盖方法setTitle时,我遇到以下问题。

//InfoDisplayer is inner class of class MenuActionListener
    class InfoDisplayer extends JDialog{ 


    JLabel info;
                BorderLayout infoBorderLayout = new BorderLayout();

                public InfoDisplayer(JFrame ownerFrame){
                    super(ownerFrame,true); //Always modal is set to be true....
                    info = new JLabel();
                    setFocusable(false);                        
                    setSize(300,400);
                    setDefaultCloseOperation(DISPOSE_ON_CLOSE);
                    setLayout(infoBorderLayout);
                    add(info,BorderLayout.SOUTH);
                    setVisible(true);
                }

                void setInfo(JLabel  info){
                    this.info = info;
                }

                public void setTitle(String  title){
                       setTitle(title); 
                    }                                   
                }

            if ((event.getActionCommand()).equals("HowToPlay")){
            InfoDisplayer instructionsDisplay = new InfoDisplayer(gUIManagerFrame); 
                    //gUIManagerFrame is an object of its outer class,MenuActionListener
                instructionsDisplay.setTitle("INSTRUCTIONS");
                instructionsDisplay.setInfo(new JLabel("<html><h1><B>INSTRUCTIONS</B></h1></html>"));

                }   
                else{// if about is clicked!!
                InfoDisplayer aboutDisplay = new InfoDisplayer(gUIManagerFrame);
                aboutDisplay.setTitle("MineSweeper v0.1");
                aboutDisplay.setInfo(new JLabel("<html><h1><B>MineSweeperv1.0</B></h1> </html>"));

            }
        }           

setTitle和setInfo方法不起作用。除此之外,setTitle方法也会产生异常。

  

在   graphicalUserInterface.BoardMenuBar $ MenuItemsActionListener $ 1InfoDisplayer.setTitle(GUIManager.java:338)     在   graphicalUserInterface.BoardMenuBar $ MenuItemsActionListener $ 1InfoDisplayer.setTitle(GUIManager.java:338)   在   graphicalUserInterface.BoardMenuBar $ MenuItemsActionListener $ 1InfoDisplayer.setTitle(GUIManager.java:338)     在   graphicalUserInterface.BoardMenuBar $ MenuItemsActionListener $ 1InfoDisplayer.setTitle(GUIManager.java:338)     在   graphicalUserInterface.BoardMenuBar $ MenuItemsActionListener $ 1InfoDisplayer.setTitle(GUIManager.java:338)     在   graphicalUserInterface.BoardMenuBar $ $ MenuItemsActionListener 1InfoDisplayer.setTitle(GUIManager.java:338)

我也非常想知道继续异常生成的原因。

编辑:抱歉,我没有看过递归电话。这是我的错。现在我纠正了它。

3 个答案:

答案 0 :(得分:2)

public void setTitle(String  title){
                   setTitle(title); 
                }                                   

这是自称 - 递归。你想要

public void setTitle(String  title){
                   super.setTitle(title); 
                }                                   

答案 1 :(得分:1)

查看您的setTitle代码:

public void setTitle(String  title) {
   setTitle(title); 
} 

这不可能奏效,可以吗?你的方法只是无休止地递归,最终炸毁堆栈。目前还不清楚你想做什么,但如果你只是想使用继承的实现,你可以完全删除你的方法。

现在setInfo更改字段的值,但不会将标签添加到对话框中。您可能希望删除现有标签,然后添加新标签。

答案 2 :(得分:1)

public void setTitle(String  title){
        setTitle(title); 
    }                                   
}

您尝试覆盖该方法的代码一遍又一遍地调用该方法(递归)。最终堆栈内存不足,程序崩溃。

我假设您正在尝试使用默认的setTitle()方法,为此您希望使用超类的方法setTitle()。

public void setTitle(String  title){
        super.setTitle(title); 
    }                                   
}

简单修复,但可以创造奇迹!