标签: java-web-start

Java Web Start - 如何清除缓存(或从用户的角度更新应用程序)

在浏览器中下载JNLP后,它会被缓存,因此不需要再次下载,这很好.但是,因此,如果我更新JNLP使用的JAR,用户仍将看到缓存中的旧版本应用程序.

您可以通过在终端中运行它来清除缓存:

javaws -uninstall
Run Code Online (Sandbox Code Playgroud)

但很明显,当您的更新准备就绪时,用户无法运行此命令.它应该比这更无缝.

一个想法是更改jnlp文件名,以便下载新文件,如MyJWS-01.jnlp,以包含版本号.

还有其他方法吗?

java jnlp cache-control java-web-start

17
推荐指数
1
解决办法
2万
查看次数

在Jenkins上通过Java Web Start启动从属代理时出现问题

我们最近将Jenkins升级到最新版本.

从那时起,每当我尝试启动它时,我都无法通过命令行通过Java WebStart启动从属设备我得到"无法启动应用程序"错误

在详细信息面板中使用此功能

CouldNotLoadArgumentException[ Could not load file/URL specified: http://MyServer:8080/computer/Slave1/slave-agent.jnlp]
    at com.sun.javaws.Main.launchApp(Unknown Source)
    at com.sun.javaws.Main.continueInSecureThread(Unknown Source)
    at com.sun.javaws.Main.access$000(Unknown Source)
    at com.sun.javaws.Main$1.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

当尝试浏览Jenkins站点并从那里进行午餐时,IT WORKS然后如果您再重新启动该框,则启动时的命令行无法完成该任务.

这是我试图从奴隶运行的命令

cd "C:\Program Files (x86)\Java\jre7\bin"
javaws http://MyServer:8080/computer/Slave1/slave-agent.jnlp
Run Code Online (Sandbox Code Playgroud)

问题是这曾经奏效.我也尝试更新到最新版本的Java,但没有运气,

任何想法有人吗?

java java-web-start jenkins

17
推荐指数
2
解决办法
5万
查看次数

通过Java Webstart运行时,invokeLater中出现NullPointerException

从JRE 1.7.0_21升级到1.7.0_25-b15后,我的应用程序在从Java WebStart运行时开始在SwingUtilities.invokeLater(...)中抛出NullPointerException.令人惊讶的是,当它作为一个独立的应用程序(在JWS之外)执行时,它运行良好.

这是堆栈的顶部:

Exception in thread "AWT-EventQueue-2" java.lang.NullPointerException
at sun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1011)
at sun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1007)
at sun.awt.SunToolkit.getSystemEventQueueImpl(SunToolkit.java:1002)
at java.awt.Toolkit.getEventQueue(Toolkit.java:1730)
at java.awt.EventQueue.invokeLater(EventQueue.java:1217)
at javax.swing.SwingUtilities.invokeLater(SwingUtilities.java:1290)
at AppletView$8.setBaseUnits(AppletView.java:536)
    (...)
Run Code Online (Sandbox Code Playgroud)

为了全面了解:方法setBaseUnits(..)被远程服务器从RMI调用为回调.完整的堆栈跟踪很长.

安全模型中是否有某些内容在RMI或JWS中发生了变化,可能会破坏事物?如果是这样,我会期待一些安全性异常,但它可能是在JRE中未正确检测到的并导致NPE.

任何建议表示赞赏.


----更新1 :

JRE 1.7.0_25更新可能存在类似的问题,可能涉及一些安全更改和AppContext对象:https : //forums.oracle.com/message/11080621 https://forums.oracle.com/thread/2552799.我尝试过建议修复:https://forums.oracle.com/message/11082162#11082162但没有任何成功.

我可以在我的应用程序中看到3个AWT-EventQueue线程,数字从0到2.看起来如果JWS启动程序,JRE会为不同的应用程序上下文创建额外的事件队列.JWS中有3个AppContext和3个EVT,如果从IDE执行程序,则只有一个上下文和EVT.


----更新2 :

下面的guruman建议有一个解决方法(非常感谢).不幸的是,SwingUtilities.invokeLater(..)必须替换对来自RMI线程的所有调用,并且程序开始依赖于Sun JRE内部API.

我仍然在寻找更具体的方法,而不是针对Sun JRE.我认为这是一个JRE错误.也许它可以以某种方式修补:在RMI线程中AppContext不应为null.


----更新3:

我做了一个简单的测试用例来说明问题.它包含4个文件.要运行此测试用例,需要签署目标jar(TestCase.jar).首先在launch.jnlp中指定正确的代码库,然后通过Java Web Start运行服务器(例如,使用javaws launch.jnlp).屏幕上应显示以下框架:

启动后的服务器应用程序框架

然后可以执行RMI客户端.成功执行后,框架应包括:

成功进行RMI调用后的服务器应用程序框架

但是如果您尝试使用JWS执行服务器您将在客户端程序中获得以下异常(异常从RMI服务器传播到RMI客户端):

Exception in thread "main" java.lang.NullPointerException
    at sun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1011)
    at sun.awt.SunToolkit.getSystemEventQueueImplPP(SunToolkit.java:1007)
    at sun.awt.SunToolkit.getSystemEventQueueImpl(SunToolkit.java:1002)
    at java.awt.Toolkit.getEventQueue(Toolkit.java:1730)
    at java.awt.EventQueue.invokeLater(EventQueue.java:1217)
    at javax.swing.SwingUtilities.invokeLater(SwingUtilities.java:1290)
    at testcase.RmiServiceImpl.callBack(RmiServiceImpl.java:70)
    at …
Run Code Online (Sandbox Code Playgroud)

java swing rmi java-web-start

17
推荐指数
2
解决办法
8529
查看次数

使用受信任证书签署jar文件以进行JWS部署

我开发了一个开源程序WPCleaner,它通过Java Web Start分发.当前版本可从http://site4145.mutu.sivit.org/WikiCleaner/WikiCleaner.jnlp获取

随着Java的最新更新,当您需要应用程序具有一些权限(写入首选项,访问其他网站,......)时,通过Java Web Start部署Java应用程序变得越来越困难

我的应用程序是自签名的,之前还可以,但是新的更新要求用户在每次运行时都接受应用程序,而不仅仅是一次性,如果他们愿意的话.所以,我决定使用可信证书来签署我的申请.

我从Certum得到了一个(显然,他们对开源开发人员是免费的),继这个讨论之后:开源项目的代码签名证书?

我已经生成了一个新的jar文件,使用此证书签名(jar文件可从http://site4145.mutu.sivit.org/WikiCleaner/WikipediaCleanerTest.jar获得),但我仍有问题:当我通过JWS启动应用程序时,Java仍然会显示一个警告窗口,让我一劳永逸地信任该应用程序.编辑器仍然显示为UNKNOWN,但是当我查看消息的详细信息时,这是我从Centrum使用的新证书.

有没有人知道我做错了什么?我认为拥有来自可信CA(Centrum似乎是Java cacerts)的证书将允许用户一劳永逸地接受证书.

谢谢

PS:当我运行时jarsigner -verify,我收到以下警告"此jar包含其证书链未经过验证的条目."

java code-signing certificate java-web-start

17
推荐指数
2
解决办法
2万
查看次数

我如何Java webstart多个依赖的本机库?

示例:我有两个共享对象(同样应该适用于.dll).第一个共享对象来自第三方库,我们称之为libA.so. 我用JNI包装了一些并创建了我自己的库libB.so. 现在libB依赖于libA.

在webstarting时,两个库都在某个webstart工作区中.我的java代码试图加载libB.此时系统加载程序将尝试加载不在系统库路径中的libA(java.library.path不会帮助它).最终结果是libB有一个不满意的链接,无法使用.

我试过在libB之前加载libA,但是仍然无效.似乎操作系统想为我加载.除了静态编译之外,我有什么方法可以完成这项工作吗?

java java-native-interface java-web-start

16
推荐指数
2
解决办法
2425
查看次数

jnlp中的jar资源未由相同的证书签名

我已经在网络开始工作了几年,并且有签署罐子的经验,什么不是.我正在第一次尝试使用Web start部署RCP应用程序,虽然我实际上已使用相同的证书签署了所有的jar,但我仍然收到此错误:'jnlp中的jar资源未使用相同的证书签名'

还有其他人遇到过这个吗?如果是这样,有关如何解决的任何想法?

java rcp jnlp java-web-start

16
推荐指数
1
解决办法
4万
查看次数

Java Web Start应用程序故障排除和访问日志文件

我正在启动一个突然关闭的Java Web Start应用程序.有没有人知道如何访问Java Web Start的日志.是否有任何已知原因导致其突然关闭?

java jnlp java-web-start

16
推荐指数
2
解决办法
3万
查看次数

Java Web Start:自Java 8 Update 111以来无法通过代理进行隧道传输

自Java 8 Update 111以来,我们的一些客户无法再运行我们的Java Web Start客户端了.他们得到:

java.io.IOException:无法通过代理进行隧道传输.代理返回"需要HTTP/1.1 407代理身份验证

看起来它与此更改有关:

现在,默认情况下,在为HTTPS设置隧道时需要基本身份验证的代理将不再成功.如果需要,可以通过从jdk.http.auth.tunneling.disabledSchemes网络属性中删除Basic,或者通过在命令行上将同名的系统属性设置为""(空)来重新激活此身份验证方案.

如果客户不愿意改变他们的代理身份验证方法,有什么办法吗?

注意:添加<property name="jdk.http.auth.tunneling.disabledSchemes" value=""/><resources>JNLP无效.这是因为这种方式只支持少数属性(本页底部附近有一个列表)."jdk.http.auth.tunneling.disabledSchemes"不在其中.

java https proxy tunneling java-web-start

16
推荐指数
3
解决办法
2万
查看次数

java web start替代方案

我们正在寻找Java web start的替代方案,它可以有效地执行相同的操作,只是更好地实现.我们遇到了大麻烦.我们有一些XP桌面办公室,所有办公室都略有不同,到目前为止只有少数办公室没有认真调整.问题与不能很好地使用代理设置(使用Java控制面板中的直接连接允许它工作),拒绝在设置"-Xmx"之类的参数时运行但在不运行时运行正常(直到它运行内存不足)和其他我们无法解决的奇怪问题.

Web开始工作的方式正是我们想要的,即连接到具有应用程序的服务器,下载任何已更改的内容,保留jar缓存等.其他团队在这里使用'clickonce'作为他们的C#应用​​程序,它确实有效地同样的事情,但似乎没那么麻烦.

我确信我们并不是唯一遇到这种情况的人,但搜索并没有真正显示任何替代方案.我们已经考虑编写一个存根本地应用程序,它本质上只是一个URLClassLoader,它可以动态地通过网络加载我们的应用程序,但不幸的是,它与其他办公室相比太慢了.有人有主意吗?

谢谢

更新

如果有人对最终发生的事情感到好奇,我们在一个月左右的时间里给了webstart但是继续遇到问题所以我们实现了自己的版本.它基本上只是一个存根,它有一个指向Web服务器的URL类加载器.这是<200行代码,它已经运行了好几个月.这不是理想的,但在有人改进webstart之前我们会坚持下去.

更新2018年

所以,几年后,我正在研究一个同样问题的新项目.这次我们使用的是getdown,而不是编写我们自己的webstart实现.我们发现这是对网络开始的巨大改进,它对我们来说非常好.

java deployment urlclassloader java-web-start

15
推荐指数
2
解决办法
1万
查看次数

用Java 6 JRE而不是JRE 7打开JNLP文件

我有一个基于Java 6的Java Web Start应用程序,我需要在Windows机器上打开它.机器安装了JRE 7,手动将JRE 6复制到该Program Files文件夹.问题在于,无论何时我想打开JWS应用程序,它都会使用Java 7打开.即使我使用javawsJRE 6中的可执行文件,一些属性仍然引用JRE 7文件(我通过使用验证了这一点javaws -verbose app.jnlp.我如何强制使用JRE 6仅适用于此应用程序?

java windows java-web-start

15
推荐指数
2
解决办法
5万
查看次数