Исключение в методе 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);
}
}
Простое исправление, но творит чудеса!