Исключение в методе setTitle

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

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

Это называет себя рекурсивным. Ты хочешь

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам