Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将jetty与Repast simphony一起使用时出错_Java_Eclipse_Jetty_Java Websocket_Repast Simphony - Fatal编程技术网

Java 将jetty与Repast simphony一起使用时出错

Java 将jetty与Repast simphony一起使用时出错,java,eclipse,jetty,java-websocket,repast-simphony,Java,Eclipse,Jetty,Java Websocket,Repast Simphony,我想将java websocket与Repast simphony一起使用,但它不起作用,出现以下错误: java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/ServletContext; at org.eclipse.jetty.websocket.servlet.UpgradeHttpServletRequest.(Upgrad

我想将java websocket与Repast simphony一起使用,但它不起作用,出现以下错误:

java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/ServletContext; at org.eclipse.jetty.websocket.servlet.UpgradeHttpServletRequest.(UpgradeHttpServletRequest.java:91) at org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest.(ServletUpgradeRequest.java:52) at org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:156) at org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:148) at org.eclipse.jetty.websocket.server.WebSocketHandler.handle(WebSocketHandler.java:97) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) at org.eclipse.jetty.server.Server.handle(Server.java:497) at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:610) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:539) at java.lang.Thread.run(Thread.java:745) java.lang.NoSuchMethodError:javax.servlet.http.HttpServletRequest.getServletContext()Ljavax/servlet/ServletContext; 位于org.eclipse.jetty.websocket.servlet.UpgradeHttpServletRequest。(UpgradeHttpServletRequest.java:91) 位于org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest。(ServletUpgradeRequest.java:52) 位于org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:156) 位于org.eclipse.jetty.websocket.server.WebSocketServerFactory.acceptWebSocket(WebSocketServerFactory.java:148) 位于org.eclipse.jetty.websocket.server.WebSocketHandler.handle(WebSocketHandler.java:97) 位于org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 位于org.eclipse.jetty.server.server.handle(server.java:497) 位于org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) 位于org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248) 位于org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 位于org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:610) 位于org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:539) 运行(Thread.java:745) 有人能告诉我如何解决这个错误吗?多谢各位

我测试了从互联网上获取的代码,如果我不使用repast simphony运行它,它就会工作

我的服务器

package webSocketTest; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.websocket.server.WebSocketHandler; import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; public class WebSocketTest { public static void main(String[] args) throws Exception { Server server = new Server(8080); WebSocketHandler wsHandler = new WebSocketHandler() { @Override public void configure(WebSocketServletFactory factory) { factory.register(MyWebSocketHandler.class); } }; server.setHandler(wsHandler); server.start(); server.join(); } } 包装网袋试验; 导入org.eclipse.jetty.server.server; 导入org.eclipse.jetty.websocket.server.WebSocketHandler; 导入org.eclipse.jetty.websocket.servlet.WebSocketServletFactory; 公共类WebSocketTest{ 公共静态void main(字符串[]args)引发异常{ 服务器=新服务器(8080); WebSocketHandler wsHandler=新的WebSocketHandler(){ @凌驾 公共void配置(WebSocketServletFactory工厂){ 工厂注册(MyWebSocketHandler.class); } }; setHandler(wsHandler); server.start(); join(); } } 包装网袋试验; 导入java.io.IOException; 导入org.eclipse.jetty.websocket.api.Session; 导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; 导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; 导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; 导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; 导入org.eclipse.jetty.websocket.api.annotations.websocket; @网袋 公共类MyWebSocketHandler{ @OnWebSocketClose public void onClose(int statusCode,字符串原因){ System.out.println(“关闭:statusCode=“+statusCode+”,reason=“+reason”); } @OnWebSocketError 公共作废登记员(可丢弃的t){ System.out.println(“错误:+t.getMessage()); } @OnWebSocketConnect public void onConnect(会话){ System.out.println(“连接:+session.getRemoteAddress().getAddress()); 试一试{ session.getRemote().sendString(“Hello Webbrowser”); }捕获(IOE异常){ e、 printStackTrace(); } } @OnWebSocketMessage 公共消息无效(字符串消息){ System.out.println(“Message:+Message”); } }
我终于找到了解决办法。我删除了默认情况下存在于项目构建路径中的所有groovy JAR,它可以正常工作。

删除groovy JAR的另一种选择: 事实上,Repast Simphony 2.2使用servlet api 2.4。它不包含javax.servlet.http.HttpServletRequest.getServletContext()方法。 另一个解决方案是用最新的javaxservlet api替换Repast Simphony默认使用的servlet api jar

package webSocketTest; import java.io.IOException; import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError; import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage; import org.eclipse.jetty.websocket.api.annotations.WebSocket; @WebSocket public class MyWebSocketHandler { @OnWebSocketClose public void onClose(int statusCode, String reason) { System.out.println("Close: statusCode=" + statusCode + ", reason=" + reason); } @OnWebSocketError public void onError(Throwable t) { System.out.println("Error: " + t.getMessage()); } @OnWebSocketConnect public void onConnect(Session session) { System.out.println("Connect: " + session.getRemoteAddress().getAddress()); try { session.getRemote().sendString("Hello Webbrowser"); } catch (IOException e) { e.printStackTrace(); } } @OnWebSocketMessage public void onMessage(String message) { System.out.println("Message: " + message); } }