Исключение в методе setTitle - PullRequest
0 голосов
/ 05 декабря 2011

Я сейчас занимаюсь разработкой собственного тральщика.При переопределении метода 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 ]

2 голосов
/ 05 декабря 2011
public void setTitle(String  title){
                   setTitle(title); 
                }                                   

Это называется само по себе - рекурсивно.Вы хотите

public void setTitle(String  title){
                   super.setTitle(title); 
                }                                   
1 голос
/ 05 декабря 2011
public void setTitle(String  title){
        setTitle(title); 
    }                                   
}

Этот код, в котором вы пытаетесь переопределить метод, вызывает метод снова и снова (рекурсивно).В конце концов стеку не хватает памяти, и ваша программа падает.

Я предполагаю, что вы пытаетесь использовать метод setTitle () по умолчанию, и для этого вы хотите использовать метод setTitle () суперкласса.

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

Простое исправление, но творит чудеса!

1 голос
/ 05 декабря 2011

Посмотрите на ваш setTitle код:

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

Это не может сработать, не так ли?Ваш метод просто бесконечно повторяется, в конечном итоге разрушая стек.Непонятно, что вы хотите сделать, но если вы просто хотите использовать унаследованную реализацию, вы можете просто полностью удалить свой метод.

Теперь setInfo меняет значение поля, но не добавляетметка для диалога.Возможно, вы захотите удалить существующую метку , а затем добавить новую.

...