自从Adobe AIR发布以来,我想知道为什么Java Web Start在过去没有引起更多的关注,对我而言似乎非常相似,但是Web启动可以使用很长时间.
这主要是因为Sun的营销不好,还是除了需要安装合适的JVM之外还有更多的技术问题?您是否有使用Web Start的糟糕经历?如果是的话,哪个?使用Web Start分发应用程序时,您有什么建议?
我在应用程序中发现了一个完全冻结JVM的错误.生成的堆栈跟踪将为开发人员提供有价值的信息,我想从Java控制台检索它.当JVM崩溃时,控制台被冻结,我无法再复制包含的文本.
有没有办法将Java控制台直接传递给文件或其他一些访问Java应用程序的控制台输出的方法?
更新:我忘记提及,而不更改代码.我是一名手动测试员.
更新2:这是在Windows XP下,它实际上是一个Web启动应用程序.管道输出
javaws jnlp-url不起作用(空文件).
我是新来的,我为我糟糕的英语道歉.
我对Java Web Start技术服务的Applet类有一点问题.我有一些平台依赖的JAR文件,Web Start正确下载,但是当我通过对象的getResourceAsStream(String fileName)方法获取内容时ClassLoader,首先fileName向WEB服务器发出GET请求,收到404 Not Found响应后,资源从JAR文件正确加载.问题是我在JAR中有很多文件,所以我在WEB服务器上有很多不必要的负载,因此我必须等待很长时间才能使用Applet.
在Google上搜索我发现了一些讨论据说添加参数codebase_lookup值false,但这并没有解决问题.此页面与codebase_lookup参数相关,表示Applet的默认行为是从JAR文件加载资源,然后从Applet代码库加载,在我的情况下,行为是相反的.
我还eager="true"为.jnlp文件中的每个JAR资源添加了属性,但行为始终相同.Applet是使用NetBeans开发和构建的,生成的html和jnlp文件如下.
launch.html
<applet width="300" height="300">
<param name="jnlp_href" value="launch.jnlp"/>
<param name="codebase_lookup" value="false"/>
</applet>
Run Code Online (Sandbox Code Playgroud)
launch.jnlp
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jnlp codebase="http://192.168.23.4/contact" href="launch.jnlp" spec="1.0+">
<information>
<title>ContactNR</title>
<vendor>Roberto Santini</vendor>
<homepage href=""/>
<description>ContactNR</description>
<description kind="short">ContactNR</description>
</information>
<resources>
<j2se version="1.5+"/>
<jar eager="true" href="ContactNR.jar" main="true"/>
<jar eager="true" href="lib/VDK.jar"/>
<security>
<all-permissions/>
</security>
</resources>
<resources arch="amd64" os="Linux">
<jar eager="true" href="lib/liblinux64.jar"/> …Run Code Online (Sandbox Code Playgroud) 我有一个Java Web Start应用程序,我在Windows 7,Linux和Mac OS X 10.7上测试过(在所有方面都可以正常工作).
在Mac OS X 10.8 Mountain Lion上发生以下错误,无法选择"允许".
错误如下所示:

有谁知道这个的解决方法?
快速背景: 我们发布了一个webstart应用程序,其中包括我们自己的应用程序罐和众多第三方jar.Webstart要求jnlp文件引用的所有分布式jar都由单个证书签名.因此,我们使用自签名证书签署所有罐子(我们的罐子和第三方罐子).一些第三方罐子已经由生产它们的一方签署,但我们只是再次签署它们,这很好.到现在.
问题: 我们最近从Java 6迁移到Java 7,突然webstart拒绝加载一些jar,抱怨:"无效的SHA1签名文件摘要".这只发生在一些罐子而不是其他罐子上,并且那些失败的罐子似乎有多个签名.
在搜索SO和互联网之后,似乎Java的jarsigner的默认签名算法在Java 6和Java 7之间已经发生了变化,从SHA1到SHA256,并且各种人都建议使用"jarsigner -digestalg SHA1"来解决验证问题.我试过了,果然我们的多重签名罐子验证了.所以这似乎是我们问题的解决方法.
从我可以收集到的内容来看,第三方签名似乎是SHA1签名,我们使用默认签名 - SHA256签名 - 导致签名混合.当我使用'-digestalg'开关强制SHA1时,我们有两个相同类型的签名,验证现在可以正常工作.所以似乎这个问题是由多个签名使用不同的算法引起的?或者还有其他一些我缺失的因素.
问题:
用户正在运行从浏览器启动的JNLP应用程序.JNLP启动的*.jar文件由受信任的CA颁发的证书签名.
启动jar文件时,会向用户询问是否信任签名者(不是CA - CA已经信任).
如果用户说"是",则将签名者的证书添加到信任存储区.
问题是:同一个对话框再次显示的条件是什么?
即使在用户最初选中" 不再显示此项 "复选框后,其中哪些(或其他?)将触发对话框显示?
在浏览器中下载JNLP后,它会被缓存,因此不需要再次下载,这很好.但是,因此,如果我更新JNLP使用的JAR,用户仍将看到缓存中的旧版本应用程序.
您可以通过在终端中运行它来清除缓存:
javaws -uninstall
Run Code Online (Sandbox Code Playgroud)
但很明显,当您的更新准备就绪时,用户无法运行此命令.它应该比这更无缝.
一个想法是更改jnlp文件名,以便下载新文件,如MyJWS-01.jnlp,以包含版本号.
还有其他方法吗?
我们最近将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,但没有运气,
任何想法有人吗?
从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客户端.成功执行后,框架应包括:

但是如果您尝试使用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) 我开发了一个开源程序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 ×10
java-web-start ×10
code-signing ×2
jar ×2
jnlp ×2
applet ×1
certificate ×1
classloader ×1
jarsigner ×1
jenkins ×1
logging ×1
macos ×1
ria ×1
rmi ×1
sign ×1
signed ×1
swing ×1
testing ×1