首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Java11+ Openwebstart在远程管理界面中使用java.sql.Timestamp

如何通过Java11+ Openwebstart在远程管理界面中使用java.sql.Timestamp
EN

Stack Overflow用户
提问于 2019-11-28 17:38:08
回答 1查看 254关注 0票数 0

设置: Windows 10 openjdk-11.0.5+10 Openwebstart 1.0.0

我们有一个通过RMI连接到后端服务器的Java Swing客户端。客户端通过JNLP分发。

当我们启动客户端时,一切都很正常,直到客户端通过RMI获得一个java.sql.Timestamp并希望将其反序列化。然后,我们会得到以下异常:

代码语言:javascript
复制
Caused by: exceptions.unchecked.communication.ClientLoginException: java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
    java.lang.ClassNotFoundException: java.sql.Timestamp    
 at client.LoginHandler.login(LoginHandler.java:134)     
 at code.MainClient.lambda$0(MainClient.java:317)    
 at com.github.rholder.retry.AttemptTimeLimiters$NoAttemptTimeLimit.call(AttemptTimeLimiters.java:78)    
 at com.github.rholder.retry.Retryer.call(Retryer.java:160)     ... 41 more 

Caused by: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:  
   java.lang.ClassNotFoundException: java.sql.Timestamp     
at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:194)    
at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:209)     
at java.rmi/java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:161)     
at com.sun.proxy.$Proxy14.login(Unknown Source)    
 at client.LoginHandler.login(LoginHandler.java:128)     ... 44 more 

Caused by: java.lang.ClassNotFoundException: java.sql.Timestamp     
at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)     
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)     
at java.rmi/sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1207)    
 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)    
 at java.base/java.lang.Class.forName0(Native Method)    
 at java.base/java.lang.Class.forName(Class.java:398)     
at java.rmi/sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1221) 

我们的JNLP看起来是这样的:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<jnlp
spec="1.0+"
codebase="http://192.168..."
href="Intranet.jnlp">
<security>
<all-permissions/>
</security>
<information>
<offline-allowed/>
</information>
<resources>
<j2se version="1.8.0_25+" href="http://java.sun.com/products/autodl/j2se" java-vm-args="-XX:+UseParallelGC -XX:+CMSClassUnloadingEnabled -Xincgc -Xnoclassgc -Xms64m -Xmx1024m"/>
<property name="sun.java2d.transaccel" value="true" />
<property name="sun.java2d.noddraw" value="true" />
<property name="java.util.Arrays.useLegacyMergeSort" value="true" />
<jar href="lib/intranet-client-ei-0.0.1-SNAPSHOT.jar"/>
<!--....-->
</resources>
<application-desc main-class="xdev.Application">
<argument>-application.type=webstart</argument>
<argument>-main=start.Main</argument>
<argument>-mode</argument>
<argument>ei</argument>
</application-desc>
</jnlp>

然后,我们添加了以下内容

代码语言:javascript
复制
<j2se  version="1.8.0_25+" href="http://java.sun.com/products/autodl/j2se" java-vm-args="-XX:+UseParallelGC -XX:+CMSClassUnloadingEnabled -Xincgc -Xnoclassgc -Xms64m -Xmx1024m 
--add-modules=ALL-SYSTEM,java.base,java.rmi,java.sql
--add-exports=java.base/sun.security.action=ALL-UNNAMED
--add-exports=java.rmi/sun.rmi.server=ALL-UNNAMED,java.base,java.sql
--add-exports=java.sql/java.sql=ALL-UNNAMED,java.base,java.rmi
"/>

但这并不管用。

当我们从终端(使用-classpath ./lib/*)启动客户端时,一切工作正常。因此,代码可以与Java11一起工作,但是OpenWebstart不能在类路径模式下运行它。

有谁有主意吗?

EN

回答 1

Stack Overflow用户

发布于 2020-06-19 22:57:44

请您使用以下定义:

代码语言:javascript
复制
<j2se version="1.8.*" .../>

通过使用*而不是+,您不允许使用高于1.8的新版本。也许你在用Java11运行你的应用程序时遇到了问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59085704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档