标签: java-web-start

如何在jnlp文件中指定JRE范围?

我们有一个使用Java Web Start的Java应用程序.jnlp文件配置为[j2se version ="1.5+"].因此,如果安装了JRE 1.5和1.6,则应用程序将在1.6上运行.

现在,我们要求应将应用程序限制为仅在范围内运行 - JRE 1.5.0_07到JRE 1.5.0_17

[j2se version ="1.5*"]将无效 - 它将始终使用1.5系列中最新的jre启动应用程序.

我可以通过包含href属性来请求确切的产品版本.[j2se version ="1.5.0_14"href ="http://java.sun.com/products/autodl/j2se"/]

但是如何在jnlp文件中指定特定范围的JRE,以便JWS仅从该范围中获取JRE?因此,如果安装了1.5.0_07,1.5.0_17和JRE 6,它应该在1.5.0_17上运行应用程序.

有没有一个很好的方法来实现这一目标?

java jnlp java-web-start

9
推荐指数
1
解决办法
7522
查看次数

通过JNLP传递动态参数

我正在使用JavaScript来执行JNLP,最终将执行我的客户端.

我试图通过JavaScript执行将参数传递给JNLP并通过我的客户端内的JNLP获取这些参数.

JavaScript正在执行此URL,例如:

http://localhost:8080/MyJnlp.jnlp?login=14hhh765p&pass=ggyyktff
Run Code Online (Sandbox Code Playgroud)

现在我的JNLP将尝试以<application-desc name tag这种方式获取参数:

<application-desc name="..." main-class="com.main.execute" >
        <argument>-nosplash</argument>
        <argument>-q</argument>
    <argument><%=request.getParameter("login")%></argument>
    <argument><%=request.getParameter("pass")%></argument>
</application-desc>
Run Code Online (Sandbox Code Playgroud)

但它没有用.

我无法以这种方式在我的客户端代码中检索这些参数:

login=getParamsFromJnlp("login")
..

public String getParamsFromJnlp(String key) {
    return System.getProperty(key);
}
Run Code Online (Sandbox Code Playgroud)

JNLP在APACHE2.2中

知道什么是错的吗?

java apache jnlp java-web-start web

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

Java 7使用Web Start打破OS X上的SWT应用程序

我们有一个通过使用SWT库的webstart启动的应用程序.

众所周知,osx需要swt库在主线程中运行,所以我们在jnlp中有这个:

<resources os="Mac"> 
    <j2se version="1.6+" java-vm-args="-XstartOnFirstThread"/>
    <jar href="swt-mac64.jar"/>
</resources>
Run Code Online (Sandbox Code Playgroud)

由于我们已经升级到Java 7(1.7.0_10),似乎webstart没有将"-XstartOnFirstThread"传递给它启动的java进程.

我可以从'ps'看到java进程没有得到"-XstartOnFirstThread"选项.

有谁知道如何让webstart回到之前的行为?

问候,戈德.

这是webstart日志显示的内容:

Java Web Start 10.10.2.18
Using JRE version 1.7.0_10-b18 Java HotSpot(TM) 64-Bit Server VM
User home directory = /Users/shier
----------------------------------------------------
c:   clear console window
f:   finalize objects on finalization queue
g:   garbage collect
h:   display this help message
m:   print memory usage
o:   trigger logging
p:   reload proxy configuration
q:   hide console
r:   reload policy configuration
s:   dump system and deployment properties
t:   dump thread …
Run Code Online (Sandbox Code Playgroud)

java macos swt java-web-start java-7

9
推荐指数
1
解决办法
1608
查看次数

jnlp webstart nativelib:如何为os指定不同的体系结构

在java webstart文件(jnlp)中,您可以指定nativelib标记以加载二进制文件.您还可以通过指定os属性为不同的操作系统指定不同的操作系统.

例如:

<resources os="Linux">
    <nativelib href="....jar"/>
</resources>

<resources os="Windows">
    <nativelib href="....jar"/>
</resources>

<resources os="Mac OS X">
    <nativelib href="....jar"/> 
</resources>
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能为不同的架构指定不同的二进制文件呢?例如win32和win64或linux 32和linux 64bit.操作系统.我在哪里可以找到os属性的选项列表?

java jnlp java-web-start

8
推荐指数
1
解决办法
4181
查看次数

Java Web Start始终在Windows XP上缓存JNLP文件

在我的公司,我们使用Java Web Start将客户端软件分发给客户.他们使用不同的Windows版本:XP,Vista和7.

我们在过去通过JWS部署了一个版本最少的版本.我们的最新版本包括几个文件更改,一些罐子不见了,其他的出现了,等等.

我们发现Windows XP计算机上的升级失败,因为JWS仍然试图查找在Web服务器上不再可用的jar文件.我已经检查了我的HTTP服务器日志,并且在应用程序启动期间永远不会从XP机器上访问JNLP文件.如果我在Vista或Windows 7上尝试相同的一切正常,JWS将获取JNLP描述符并在更新可用时下载差异.因此,在XP机器上,只有已知的jar文件才会更新,如果JWS没有从缓存的JNLP文件集中找到某些内容,则会抛出错误.

我编写了一个手动生成JNLP文件的servlet.我在我的servlet代码中使用以下头配置.

response.setDateHeader("Last-Modified", lastModification);
// IE won't download JNLP file if Cache-Control header presents
//response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.setHeader("Expires", "Mon, 26 Jul 1990 05:00:00 GMT");
Run Code Online (Sandbox Code Playgroud)

这使得JNLP文件总是过时的,这应该在每次客户端通过JWS启动时触发重新检查文件.我甚至可以在XP上的缓存查看器中看到这个日期:

缓存查看器

我在Oracle的bugreport网站上发现了一个永远无法解决的问题:错误ID:6189106刚刚在Windows XP上对Java7进行了相同的测试,但这个问题仍然存在.但仅在XP上,因为部署缓存的路径中有空白字符("Documents and Settings").有人说,如果我将部署缓存的路径更改为没有空格字符的东西,它将解决问题.嗯,这不是一个真正的解决方案,因为用户几乎不能写到他们的个人资料以外的位置.

因为这个bug存在了这么长时间,我想应该有某种解决方法.我不想每次都告诉客户清除Java缓存并从Web重新安装应用程序.我们希望将来更快的发布周期,这将使其更加恶化.我希望有人对此有个好主意.:|

java distribution java-web-start

8
推荐指数
2
解决办法
6850
查看次数

导入"javax.jnlp"无法解析

我正在学习Java并尝试使用Java web start运行一些示例.

但是,我似乎无法找到那个包javax.jnlp.

同样的错误让我在windows和linux上都遇到了困难.我在windows上安装了oracle jdk 7.OpenJDK 1.6是在linux上安装的版本.

在互联网上搜索没有运气的包裹.它在oracle的网站上已不再可用,因为他们坚持认为该软件包是jdk的一部分.

我搜索了安装目录中的it.some声称它在jnlp.jar文件中,其他人在javaws.jar文件中声明...这两个文件都不是我安装的一部分.

java import jnlp java-web-start

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

有没有办法在OSX Lion上用Java 6重新启用javaws?

随着Apple在Java上的Java 6的最新更新,它不仅禁用了Web浏览器支持,还禁用了Java Web Start.我将javaws与需要Java 6和32位的应用程序一起使用.Java 6仍然存在于我的系统中,但javaws不起作用:

James-Babkas-iMac:~ jimbabka$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

James-Babkas-iMac:~ jimbabka$ javaws http://foo.bar.org/bgameui/bgameui.jnlp
No Java runtime present, requesting install.
Unable to locate a Java Runtime to invoke.
Run Code Online (Sandbox Code Playgroud)

当我运行javaws命令时,我收到一条弹出消息,指示我进入Oracle网页,在那里我可以下载64位Java 7,这对我没用.有没有办法让javaws再次使用32位Java 6?

java macos java-web-start

8
推荐指数
1
解决办法
6090
查看次数

Java Web Start - 使用另一个本机依赖项加载本机依赖项

我正在使用Java Web Start来启动依赖于某些第三方本机库的Java应用程序.然后,这些本机库commonLib使用LoadLibrary/dlopen 加载另一个本机库()作为它们的依赖项.

不使用Web Start时,当本机库位于同一目录中时,一切都按预期工作.

但是,Web Start要求将本机库打包在jar文件中并在jnlp文件中引用,我这样做了:

  <!-- Windows OS -->
    <resources os="Windows">
        <nativelib href="native/native-windows.jar" />
    </resource>

  <!-- Linux OS -->
    <resources os="Linux">
        <nativelib href="native/native-linux.jar" />
    </resources>

  <!-- Mac OSX -->
    <resources os="Mac OS X">
        <nativelib href="native/native-osx.jar"/>   
    </resources>
Run Code Online (Sandbox Code Playgroud)

本机库加载正常但它们无法加载它们的依赖项commonLib- C++ LoadLibrary/dlopen调用失败,因为该文件存在于某个jar/cache文件夹中而不是当前库搜索路径中.

在Windows上,我能够commonLib在尝试加载JNI库之前通过在Java中预加载来解决此问题,如下所示:

System.loadLibrary("commonLib");
System.loadLibrary("myNativeLib");
Run Code Online (Sandbox Code Playgroud)

但是,这种方法在OS X上不起作用 - 本机代码中的dlopen失败.dlopen显然不够聪明,如果它已经加载,不再尝试加载库.

是否有一种跨平台的方式来打包和加载依赖于Java Web Start中其他本机库的本机库?

java java-native-interface java-web-start

8
推荐指数
1
解决办法
2075
查看次数

java jre 7u45中断了classloader.getResources()?

我有代码迭代classLoader.getResources("META-INF/MANIFEST.MF")的结果,以返回类路径上的jar列表.这从1.6.0_18一直到1.7.0_40都很好.现在1.7.0_45通过显示有关混合签名/未签名代码的安全警告弹出窗口来打破此问题.

用于演示问题的小型自包含测试用例:

package testcase;
import java.io.*;
import java.net.*;
import java.util.Enumeration;
import java.util.logging.*;
public class TestCase {
    public static void main(String[] args) {
        getAllJarUrls();
    }

    public static void getAllJarUrls() {
        try {
            final Enumeration<URL> mfUrls = Thread.currentThread().getContextClassLoader().getResources("META-INF/MANIFEST.MF");
            while (mfUrls.hasMoreElements()) {
                URL jarUrl = mfUrls.nextElement();
                if (!jarUrl.getProtocol().equals("jar")) {
                    continue;
                }
                try {
                    System.out.println(jarUrl.toURI());
                } catch (URISyntaxException ex) {
                    Logger.getLogger("testcase").log(Level.SEVERE, null, ex);
                }
            }
        } catch (IOException e) {
            Logger.getLogger("testcase").log(Level.SEVERE, null, e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用jnlp(使用有效证书签名的jar)启动它,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://localhost/test" href="test.jnlp"> …
Run Code Online (Sandbox Code Playgroud)

java java-web-start

8
推荐指数
1
解决办法
6873
查看次数

自动化webstart流程

要求是自动化java webstart进程.单击JNLP文件后,加载并显示下面的图像 在此输入图像描述

这里始终没有信任的选择.我知道在Java 7 Update 51中,java收紧了安全性.所以我签署了由赛门铁克提供的公共代码签名证书的罐子,因此不需要在java控制面板例外列表中添加此站点或降低安全级别(两者都不允许在客户环境中).有没有可能让这个安全问题消失并自动运行罐子?

在MANIFEST.MF中添加了以下两个属性,并且它有效.

Codebase: *
Application-Library-Allowable-Codebase: *
Run Code Online (Sandbox Code Playgroud)

java jnlp code-signing java-web-start

8
推荐指数
1
解决办法
155
查看次数