GWT错误:java.lang.NoClassDefFoundError:com/google/GWT/core/client/GWTBridge

GWT错误:java.lang.NoClassDefFoundError:com/google/GWT/core/client/GWTBridge,java,google-app-engine,gwt,classnotfoundexception,Java,Google App Engine,Gwt,Classnotfoundexception,我正在为一个类项目使用GWT,尽管以前一切都正常,但我最近重构了代码,突然遇到了标题错误。我四处搜索,发现GWTBridge问题似乎是由两个主要因素引起的:a)针对2.5.1修复的bug,或b)试图从服务器调用客户端代码,反之亦然() 我使用的是GWT2.5.1,我99%确定我没有违反案例b),因此我感到不知所措。我实际上只是在重构时从工作版本复制并粘贴代码,所以我不确定问题出在哪里 我的直觉是,这可能与我在重构时创建的两个静态单例类有关。重构时我的目标只是让RPC不那么凌乱,因为它迫使我链接一

我正在为一个类项目使用GWT,尽管以前一切都正常,但我最近重构了代码,突然遇到了标题错误。我四处搜索,发现GWTBridge问题似乎是由两个主要因素引起的:a)针对2.5.1修复的bug,或b)试图从服务器调用客户端代码,反之亦然()

我使用的是GWT2.5.1,我99%确定我没有违反案例b),因此我感到不知所措。我实际上只是在重构时从工作版本复制并粘贴代码,所以我不确定问题出在哪里

我的直觉是,这可能与我在重构时创建的两个静态单例类有关。重构时我的目标只是让RPC不那么凌乱,因为它迫使我链接一系列异步调用,这让我发疯。我基本上做的是创建两个静态单例类(PageLoader和UserManager),其目的是进行异步调用并返回OnSuccess返回的任何内容,以便在onModuleLoad中,我可以连续进行RPC调用,而无需处理链接(例如,我可以直接转到UserManager.getInstance().isLoggedIn()然后在稍后的RPC调用中使用返回的布尔值,而无需将该调用放入onSuccess函数中)。我将这两个类与异步类一起放在client.services中

我不知道为什么这会引起问题,但我想不出其他任何事情。你知道我走对了吗

我在下面附加了一个静态类和部分返回的堆栈跟踪


用户管理器类

package com.google.gwt.sample.vendorcouver.client.services;

import com.google.gwt.core.client.GWT;
import com.google.gwt.sample.vendorcouver.client.user.VenUser;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;


/*Singleton that simplifies making asynchronous calls to the server side.*/

public class UserManager {

    private static UserManager UserManagerInstance = null;
    private static LoginServiceAsync LoginServiceInstance = null;
    private static VenUserServiceAsync VenUserServiceInstance = null;
    private static boolean isLoggedIn = false;
    private static boolean isAdmin = false;
    private static String UserName = null;


    public static UserManager getInstance()
    {
        if (UserManagerInstance == null)
        {
            UserManagerInstance = new UserManager();
            LoginServiceInstance = GWT.create(LoginService.class);
            VenUserServiceInstance = GWT.create(VenUserService.class);
        }
        return UserManagerInstance;
    }

    public boolean isLoggedIn()
    {
        LoginServiceInstance.isLoggedIn(new AsyncCallback<Boolean>() {
            public void onFailure(Throwable error) {
                Window.alert("Sorry, there seemed to be an error on the server side! You may be unable to log in.");
            }
            public void onSuccess(Boolean loggedInStatus) {
                Window.alert("isLoggedIn is sucessful; will return" + loggedInStatus);
                isLoggedIn = loggedInStatus;
            }
        });
        return isLoggedIn;
    }
package com.google.gwt.sample.vendorcouver.client.services;
导入com.google.gwt.core.client.gwt;
导入com.google.gwt.sample.vendorcouver.client.user.VenUser;
导入com.google.gwt.user.client.Window;
导入com.google.gwt.user.client.rpc.AsyncCallback;
/*简化对服务器端进行异步调用的Singleton*/
公共类用户管理器{
私有静态UserManager UserManagerInstance=null;
私有静态LoginServiceAsync LoginServiceInstance=null;
私有静态VenUserServiceAsync VenUserServiceInstance=null;
私有静态布尔值isLoggedIn=false;
私有静态布尔值isAdmin=false;
私有静态字符串UserName=null;
公共静态UserManager getInstance()
{
if(UserManagerInstance==null)
{
UserManagerInstance=新的UserManager();
LoginServiceInstance=GWT.create(LoginService.class);
VenUserServiceInstance=GWT.create(VenUserService.class);
}
返回UserManagerInstance;
}
公共布尔值isLoggedIn()
{
LoginServiceInstance.isLoggedIn(新的AsyncCallback(){
失败时公共无效(可丢弃错误){
Window.alert(“对不起,服务器端似乎有错误!您可能无法登录。”);
}
成功时的公共void(布尔loggedInStatus){
Window.alert(“isLoggedIn成功;将返回”+loggedInStatus);
isLoggedIn=loggedInStatus;
}
});
返回伊斯洛格丁;
}
堆栈跟踪:

   SEVERE: javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract boolean com.google.gwt.sample.vendorcouver.client.services.LoginService.isLoggedIn()' threw an unexpected exception: java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridge
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
    at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
    at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:487)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.NoClassDefFoundError: com/google/gwt/core/client/GWTBridge
    at com.google.gwt.user.client.Window.<clinit>(Window.java:504)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70)
    at com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
    at com.google.gwt.sample.vendorcouver.server.LoginServiceImpl.isLoggedIn(LoginServiceImpl.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.google.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:115)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:561)
    ... 40 more
Caused by: java.lang.ClassNotFoundException: com.google.gwt.core.client.GWTBridge
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:216)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    ... 52 more
SEVERE:javax.servlet.ServletContext日志:调度传入RPC调用时发生异常
com.google.gwt.user.server.rpc.unexpected异常:服务方法“public abstract boolean com.google.gwt.sample.vendorcouver.client.services.LoginService.isLoggedIn()”引发意外异常:java.lang.NoClassDefFoundError:com/google/gwt/core/client/GWTBridge
位于com.google.gwt.user.server.rpc.rpc.encodeResponseForFailure(rpc.java:389)
位于com.google.gwt.user.server.rpc.rpc.invokeAndEncodeResponse(rpc.java:579)
位于com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
位于com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
位于com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
位于org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
位于com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.appengine.tools.development.ResponseWriterFilter.doFilter(responseWriterFilter.java:123)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.appengine.tools.development.headerficationfilter.doFilter(headerficationfilter.java:34)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
在com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter上(ServeBlobFilter.java:63)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
位于com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125)
位于org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
在com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366)
位于com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349)
在com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerMo
package com.google.gwt.core.client;
import com.google.gwt.core.shared.*;
/**
* Date: 1/17/13
* Time: 12:37 PM
* This class is used for fixing class not found com.google.gwt.core.client.GWTBridge;
*
* This is only needed for GXT 2 to work. Once we remove GXT2, this can be removed also.
*/
public abstract class GWTBridge extends com.google.gwt.core.shared.GWTBridge {
}