我最近使用了Java Web Start应用程序.我使用我正在查看的页面中的嵌入式jnlp链接从我的Web浏览器启动它.该应用程序已下载,启动并正常工作.它可以访问我的本地文件系统,并在重新启动它之间记住我的偏好.
我想知道的是,为什么Java Web Start应用程序不是Web上复杂应用程序的更流行的交付格式?为什么开发人员经常花费大量时间和精力在html/javascript中复制桌面功能,而使用Java和Java Web Start可以更轻松地提供桌面应用程序的强大功能?
我知道在某些企业环境中,例如银行业,它们是向客户提供复杂交易应用程序的相对流行的方式,但为什么它们不能在整个网络上普及?
(为了便于讨论,让我们假设一个世界:下载源是"可信的"和应用程序是"签名"(即没有安全问题),下载速度快(加载时间快)开发人员知道Java(数量上他们知道html/js/php)).
随着最新的Java更新,很多人都与他们的Java Web Start的麻烦应用程式缺乏Codebase,Permissions和Application-name清单属性.虽然有资源可以帮助你实现这一目标,但我找不到任何关于这个问题的全面答案,我觉得Q-and-A会很好.所以,这是问题:
我的Java Web Start应用程序在控制台中显示以下警告:
Missing Permissions manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Missing Codebase manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Missing Application-Name manifest attribute for: http://www.codebase.com/myApp/dist/myApp.jar
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
我的应用程序的预加载器处理特定于应用程序的初始化.现在我正在尝试扩展它,以便预加载器还显示下载的应用程序JAR的进度.
为什么预加载器在第2阶段没有加载,因为这应该处理PreloaderFx::handleProgressNotification();跟踪JAR的下载我想?
2016年3月14日更新:使用DownloadServiceListener解决这个问题的方法是什么?如何将其连接到JavaFX阶段?
根据Oracle的说法,启动应用程序有4个阶段:
阶段2:加载和准备:从网络或磁盘缓存加载所需的资源,并进行验证过程.所有执行模式都会看到默认或自定义预加载器.在此阶段,应显示我的自定义预加载器.
阶段3:特定于应用程序的初始化:应用程序已启动,但可能需要在其完全正常运行之前加载其他资源或执行其他冗长的准备工作.目前,我的自定义预加载器显示如下:
我注意到的第一件事是,在阶段2中,未显示处理应用程序JAR下载的默认JavaFX预加载器.因此,用户感觉程序没有提前启动或终止,使他们多次打开JNLP文件.下载JAR后,我们进入阶段3并显示预加载器.
但是,我希望我的自定义预加载器能够处理ProgressBar中的下载进度(阶段2).我使一切尽可能简单,以便在应用程序启动期间跟踪发生的事件.这是基于Jewelsea和Oracle示例的示例:
预载:
public class PreloaderFX extends Preloader {
Stage stage;
//boolean noLoadingProgress = true;
public static final String APPLICATION_ICON
= "http://cdn1.iconfinder.com/data/icons/Copenhagen/PNG/32/people.png";
public static final String SPLASH_IMAGE
= "http://fxexperience.com/wp-content/uploads/2010/06/logo.png";
private Pane splashLayout;
private ProgressBar loadProgress;
private Label progressText;
private static final int SPLASH_WIDTH = 676;
private static final …Run Code Online (Sandbox Code Playgroud) 我需要阻止用户多次启动我的Java应用程序(WebStart Swing应用程序).因此,如果应用程序已在运行,则无法再次启动它或显示警告/再次关闭.
有没有一些方便的方法来实现这一目标?我想过阻塞一个端口或写一个文件.但希望您可以访问某些系统属性或JVM?
顺便说一句.目标平台是带有Java 1.5的Windows XP
URLConnection缓存API的描述表示为最后一句:
Java 2 Standard Edition中没有URLConnection缓存的默认实现.但是,Java Plugin和Java WebStart确实提供了一个开箱即用的功能.
在哪里可以找到有关Webstart ResponseCache的更多信息?
使用以下(groovy)代码
def url = new URL('http://repo1.maven.org/maven2/')
def connection = url.openConnection()
def result = connection.inputStream.text
Run Code Online (Sandbox Code Playgroud)
我希望每次执行代码时都会联系服务器.但是在执行时
Java Web Start 10.9.2.05
JRE-Version verwenden 1.7.0_09-b05 Java HotSpot(TM) Client VM
Run Code Online (Sandbox Code Playgroud)
行为是不同的.第一次执行代码时,会联系服务器.所有后续的代码执行都不涉及与服务器的任何通信(使用wireshark跟踪).
但它变得更加奇怪.重新启动webstart应用程序后,第一次执行代码时,http://repo1.maven.org/maven2/.pack.gz请求url 导致a 404.仅请求原始网址导致a 304 NOT MODIFIED.所有后续执行都不涉及与服务器的任何通信.
我认为通过缓存功能透明地增强urlconnection的方法很好,很好,有助于提高客户端应用程序的性能.但由于本例中的服务器没有定义Expires头,也没有定义缓存控制头,我认为上面的代码应该总是询问服务器而不是默默地忽略我的请求.
以下代码在使用webstart 10.1.1.255执行时不起作用(这是由java 7的早期测试版安装的,但我不知道这是哪一个)
URL url = new URL("http://repo1.maven.org/maven2/");
URLConnection connection = url.openConnection();
connection.setRequestProperty("Accept-Encoding", "gzip");
connection.connect();
InputStream is = connection.getInputStream();
if ("gzip".equalsIgnoreCase(connection.getContentEncoding()))
{
is = new …Run Code Online (Sandbox Code Playgroud) 我有以下JNLP文件:
<jnlp spec="1.0+" codebase="http://****:****" href="tcm2012.jnlp">
<information>
<title>TCM 2012</title>
<vendor>Drift og Performance, *** Servicecenter</vendor>
<homepage href="http://******"/>
<description/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+"/>
<jar href="tcm2012.jar"/>
</resources>
<application-desc main-class="com.****.kundeservice.TCMApplication"/>
</jnlp>
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试从网上运行时,我收到以下错误:
Found unsigned entry in resource
Run Code Online (Sandbox Code Playgroud)
随着以下的曝光
com.sun.deploy.net.JARSigningException: Found unsigned entry in resource: http://*****:****/tcm2012.jar
at com.sun.javaws.security.SigningInfo.getCommonCodeSignersForJar(Unknown Source)
at com.sun.javaws.security.SigningInfo.check(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResourcesHelper(Unknown Source)
at com.sun.javaws.security.JNLPSignedResourcesHelper.checkSignedResources(Unknown Source)
at com.sun.javaws.Launcher.prepareResources(Unknown Source)
at com.sun.javaws.Launcher.prepareAllResources(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.prepareToLaunch(Unknown Source)
at com.sun.javaws.Launcher.launch(Unknown Source)
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 …Run Code Online (Sandbox Code Playgroud) 我将部署我的Java游戏向我的朋友展示它等等,但我在Java Web Start和applets之间做出决定时遇到了麻烦.
在什么条件下优先于另一种情况,有哪些优点/缺点?
我们从附加的JNLP运行应用程序.在Java控制台上,我们使用D输出系统属性.我们的JNLP文件中的属性不再设置.这是我们遇到此类问题的第一个Java版本.一切都工作正常,包括7 Update 40.
我们已经签署了所有的罐子,但是它们的清单中没有安全属性.
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://10.0.10.230/webstart/app" href="desktop.jnlp">
<information>
<title>MyApp Desktop</title>
<vendor>MyApp GmbH</vendor>
<homepage href="http://www.myres-edv.de"/>
<description>MyApp Desktop</description>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.5+" initial-heap-size="512M" max-heap-size="1024M" javaws-vm-args="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8200"/>
<property name="org.omg.CORBA.ORBInitialHost" value="10.0.10.230"/>
<property name="org.omg.CORBA.ORBServerHost" value="10.0.10.230" />
<property name="sun.net.spi.nameservice.provider.1" value="dns,sun" />
<property name="MyApp.baktswritedos" value="true"/>
<property name="MyApp.nocomm" value="true"/>
<property name="MyApp.la.erfassungdos" value="true"/>
<property name="com.sun.corba.ee.transport.ORBTCPConnectTimeouts" value="500:30000:40:30000" />
<property name="deployment.trace.level" value="all" />
<jar href="myresjar/ejb/myres/myres_ejb_client.jar" main="true" download="eager"/>
<jar href="myresjar/ejb/myres/myres_ejb.jar" download="eager"/>
<extension name="jars" href="commonejbjars.jnlp"/>
<extension name="jars" href="jr.jnlp"/>
<extension name="jars" href="commonjars.jnlp"/>
<extension name="jars" href="commonjh.jnlp"/> …Run Code Online (Sandbox Code Playgroud) 我需要stackoverflow的一些智慧.
我将开发一个GUI应用程序,它将通过表单处理xml数据.我选择了两个选项:Java(swing或swt)或Qt.
我已经尝试过Qt(Qt设计师)和Java(Eclipse)的基础教程.我必须承认,两者都将满足我的需求.
我要解决的最后一个问题是部署会有多痛苦?
最终用户是非技术人员,因此安装和更新过程必须简单.
Java具有Java Web Start,易于更新; 如果没有JVM需要,Qt可能会更"打包".
你怎么看 ?优缺点都有什么 ?
非常感谢
直到最近,我才能够使用Java web start在Firefox中启动/打开JNLP文件.
不知道突然发生了什么JNLP文件停止启动,出现了一个启动画面,说Java Starting ...然后没有任何反应.甚至浏览器中的Java控制台和javacpl.cpl小程序也无法打开.
尝试了所有可能性:删除所有旧版本并安装了最新的JRE(java版本"1.6.0_17"),但它仍然无效.
做了一些谷歌搜索这个问题,人们建议使用-viewer选项启动javaws.exe但行为相同(启动画面显示"Java Starting ..."然后消失)
问题是我不知道任何地方(日志等)要查找导致问题的原因.
我正在使用WinXP SP3,下面的一些屏幕截图显示了有关我的系统的更多信息.如果需要,我可以提供任何其他细节,但请帮我解决这个问题.
java ×10
java-web-start ×10
jnlp ×7
applet ×1
auto-update ×1
caching ×1
deployment ×1
jar ×1
javafx-8 ×1
properties ×1
qt ×1
system ×1