【问题标题】:Exception in setTitle methodsetTitle 方法中的异常
【发布时间】:2011-12-06 02:13:52
【问题描述】:

我目前正在开发自己的扫雷器。在覆盖方法 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 方法产生异常。

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

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

编辑:抱歉,我没有查看递归调用。是我的错。现在我已经更正了。

【问题讨论】:

    标签: java exception overriding


    【解决方案1】:
    public void setTitle(String  title){
                       setTitle(title); 
                    }                                   
    

    这是自称 - 递归。你想要的

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

    【讨论】:

      【解决方案2】:
      public void setTitle(String  title){
              setTitle(title); 
          }                                   
      }
      

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

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

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

      简单的修复,但效果很好!

      【讨论】:

        【解决方案3】:

        查看您的setTitle 代码:

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

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

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

        【讨论】:

        • 如果我是正确的,为什么模型的变化不会触发视图的变化?就像在模型视图控制器中一样。我的第二个问题:如果默认情况下没有发生视图更改,我如何触发视图更改?注意我们的职业上帝:我花了很多时间在meta上,收集关于你的信息。我怀疑是专注于(TOC,编译器理论)之类的理论还是编程语言!!!
        • @EAGER_STUDENT:你的意思不是很清楚,但如果你在谈论setInfo 调用,仅仅设置一个字段不会自动更新任何其他内容。没有什么能像这样神奇地“监视”字段。
        • 如何在字段中进行更改(如 setInfo 调用)以反映在输出中。另请参阅stackoverflow.com/questions/8395621/…
        • @EAGER_STUDENT:正如我所说,您需要从一组控件中删除现有标签,然后添加新标签。但老实说,这并不是 模型 的真正变化,因为模型甚至不应该知道 UI。我怀疑从头开始重读基于 Swing 的 MVC 教程将是目前最好的做法。
        猜你喜欢
        • 2011-06-13
        • 2012-03-18
        • 1970-01-01
        • 2013-03-06
        • 2017-08-05
        • 2014-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多