亲爱的 Stack Overflow 极客,
我正在尝试使用 Java EE 7 创建一个非常基本的 Java 客户端-服务器应用程序,目的是使用 JSR 356 实现通过 websocket 发送消息。
我已经按照我在那里找到的各种博客成功地编程和部署了服务器,并且我能够将 Javascript 客户端与我的 java 服务器进行通信。
现在我想做的是创建一个独立的java应用程序,它需要与服务器通信并检索相同的信息。我读到 JSR 356 实现可以在 Java 客户端中使用,这正是我所做的。我还使用 Tyrus 创建客户端并使用闩锁机制等保持其运行。漂亮。客户端终于编程完毕,服务器已启动并运行,但是当我尝试运行客户端时,出现此错误:
java.lang.reflect.InvocationTargetException
tại sun.reflect.NativeMethodAccessorImpl.invoke0(Phương thức gốc)
tại sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
tại sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.glassfish.appclient.client.acc.AppClientContainer.launch(AppClientContainer.java:446)
at org.glassfish.appclient.client.AppClientFacade.main(AppClientFacade.java:166)
Caused by: java.lang.NoClassDefFoundError: javax/websocket/CloseReason$CloseCode
at Main.Main.main(Main.java:27)
... 6 nữa
Caused by: java.lang.ClassNotFoundException: javax.websocket.CloseReason$CloseCode
tại java.net.URLClassLoader$1.run(URLClassLoader.java:366)
tại java.net.URLClassLoader$1.run(URLClassLoader.java:355)
tại java.security.AccessController.doPrivileged(Phương thức gốc)
tại java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at org.glassfish.appclient.client.acc.ACCClassLoader.findClass(ACCClassLoader.java:237)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
tại java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 7 thêm
Java Result: 1
我在 NetBeans 7.3 中使用 Java EE 7 API + Tyrus 并在 Glassfish 4 中部署(据我所知,Glassfish 4 支持 JSR 356 实现)现在,到底为什么找不到 CloseReason 类! :(如果是这样的话,它不应该编译,不是吗?
奇怪的是,它并没有提示与 websocket 实现(JSR 356)相关的其他类,另一方面,我部署了服务器(web-app)并且 websocket 机制工作得很好。 (我想我没有在那里实现 CloseReason ..但为什么它只提示这一点!:@)
我们将非常感谢您提供的任何帮助!!
chúc mừng,
另一位 Stack Overflow 极客寻求帮助。 :)
我想说,仅分析堆栈跟踪并给您一个“答案”是完全不可能的。至少您应该包含项目中的一些代码片段。
好吧,我认为问题可能是这样的:Tyrus 库没有随应用程序客户端容器一起分发。那么在本地,类加载器想要加载的第一个类..将会失败。
因此,右键单击您的项目并选择属性。选择库。确保您的库已放置在chạy选项卡下。如果没有,请单击在此选项卡中找到的添加库...按钮并按照步骤操作!
希望这对您有帮助。如果没有,请查看cái này有关如何打包 JavaFX 客户端并通过 Java Web Start 启动它的教程。本教程中的应用程序客户端也依赖于外部库,您可能会在其中找到一些有用的东西。
Tôi là một lập trình viên xuất sắc, rất giỏi!