我真的不知道如何正确解释这个错误......
当我将此方法添加到我的控制器类时,它就开始了:
public void loadPlayerComboBox() {
try{
final PreparedStatement collectPlayerNames =
ConnectionManager.getConnection().prepareStatement("SELECT "+PLAYER_NAME+" FROM PLAYERS");
final ResultSet playerNameResults = collectPlayerNames.executeQuery();
while(playerNameResults.next()){
IViewManager.Util.getInstance().getMyContainerPane().getMyPlayerManagerPane().getPlayerNameList()
.add(playerNameResults.getString(PLAYER_NAME));
}
}catch(final SQLException e){
System.out.println("SQLException. Reason: " + e.getMessage());
}
}
而且我已经确认没有这个方法(由一个类调用,在程序启动时)我没有错误。
我的错误?当我从eclipse运行时,程序开始加载框架的顶部栏出现,但实际内容没有。
除此之外,还有一个奇怪的空盒子,我相信这是由多个进程启动引起的。
我相信这是由堆栈溢出引起的,因为我的 getInstance() 方法递归地相互调用。由于某种原因,我无法取回堆栈跟踪,目前调试屏幕只是空白。我检查了我的 .log 并且没有与该时间戳对应的错误。我不知道他们怎么能互相打电话。这是 ViewManager 方法:
static class Util {
static private IViewManager viewManager = null;
static public synchronized IViewManager getInstance() {
if (viewManager == null) {
viewManager = new ViewManager();
}
return viewManager;
}
}
和构造函数:
public ViewManager(){
super("Tony Larp DB Manager");
this.setVisible(true);
this.setDefaultCloseOperation(3);
myContainerPane = new ContainerPane();
myContentMenu = new ContentMenu();
IController.Util.getInstance();
IPlayerCharacterManager.Util.getInstance();
this.setJMenuBar(myContentMenu);
this.getContentPane().add(myContainerPane);
this.pack();
}
IController.Util.getInstance() 方法是相同的,只是它调用的类和对象的名称不同。双重检查锁定只会导致我的启动器中的第一个 IViewManager.getInstance() 实例返回一个空指针,这是同步块的开头。
澄清一下,程序IViewManager.Util.getInstance()
第一次在启动器中调用,然后IController.Util.getInstance()
在上面的构造函数中第一次调用。之后,对它的所有调用都应该只返回实例。
什么会导致这种错误?我怎么能开始修复它?