Java 加载简单GWT视图时发生异常
我有一个简单的Java 加载简单GWT视图时发生异常,java,gwt,Java,Gwt,我有一个简单的entrypoint类,它只加载一个面板 public class TestUI implements EntryPoint { PanelA panelA = new PanelA(); public void onModuleLoad() { final RootPanel rootPanel = RootPanel.get(); rootPanel.add( p
entrypoint
类,它只加载一个面板
public class TestUI implements EntryPoint
{
PanelA panelA = new PanelA();
public void onModuleLoad()
{
final RootPanel rootPanel = RootPanel.get();
rootPanel.add( panelA );
}
}
这是B盘
public class PanelB extends HTMLPanel
{
public PanelB()
{
super("Panel B");
final PanelA panelA = new PanelA();
Button btnNewButton = new Button("Go to panel A");
btnNewButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
final RootPanel rootPanel = RootPanel.get();
rootPanel.clear();
rootPanel.add( panelA );
}
});
add(btnNewButton);
}
}
这是A组
public class PanelA extends HTMLPanel
{
public PanelA( )
{
super("Panel A");
final PanelB panelB = new PanelB();
Button btnNewButton = new Button("Go to panel B");
btnNewButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
final RootPanel rootPanel = RootPanel.get();
rootPanel.clear();
rootPanel.add( panelB );
}
});
add(btnNewButton);
}
}
但是,当我尝试加载包含此入口点的页面时,它失败了,出现下面的异常跟踪。
如果我用一个普通的HTML面板替换入口点中对面板A的引用,那么它可以正常加载。我的简单面板有什么问题?
我基本上是在尝试创建一个GUI,我可以在页面之间来回点击,我想这将是实现这个目标的第一步
Exception in thread "Code server for stockwatcher from Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 com.google.gwt.dev.shell.BrowserChannel$RemoteDeathError: Remote connection lost
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:536)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
at java.io.BufferedOutputStream.flush(Unknown Source)
at java.io.DataOutputStream.flush(Unknown Source)
at com.google.gwt.dev.shell.BrowserChannel$ReturnMessage.send(BrowserChannel.java:1310)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:533)
... 2 more
在你创建的每个面板A中,你创建了一个新的面板B,它本身正在创建一个新的面板A,它正在创建一个新的面板B,这是无限延续的。也许这就是问题所在。
我认为您应该只在onClick事件中调用panel B/panel A的构造函数。对于您正在创建的每个panel A,您创建一个新的panel B,它本身正在创建一个新的panel A,它正在创建一个新的panel B,它将无限继续。也许这就是问题所在。
我认为您应该只在onClick事件中调用panel B/panel A的构造函数。您正在导致相互递归或循环依赖调用。。。下面是详细的分析
在
TestUI
中,您正在创建PanelA
的实例创建类实例时会发生什么情况?调用其构造函数。在这种情况下,将调用PanelA的构造函数。在这里,您正在创建PanelB
的实例,因此PanelB
的构造函数被调用。现在再次在PanelB
中,您正在创建PanelA
的实例,因此会调用其构造函数,并且该过程会无限重复。更好的编程技术应该避免这种循环依赖。避免这种情况,它将解决您的问题。您正在导致相互递归或循环依赖调用。。。下面是详细的分析
在TestUI
中,您正在创建PanelA
的实例创建类实例时会发生什么情况?调用其构造函数。在这种情况下,将调用PanelA的构造函数。在这里,您正在创建PanelB
的实例,因此PanelB
的构造函数被调用。现在再次在PanelB
中,您正在创建PanelA
的实例,因此会调用其构造函数,并且该过程会无限重复。更好的编程技术应该避免这种循环依赖。避免这种情况,它会解决你的问题