Java 网红 java.lang.NullPointerException (JnlpxArgs.execProgram)
Java Web Star java.lang.NullPointerException (JnlpxArgs.execProgram)
我有一个由 servlet 动态生成的 JNLP 文件。生成的 JNLP 是:
<jnlp spec="6.0+" href="launch?param1=Hooolas">
<information>
<title>JSGD</title>
<vendor>evconsul</vendor>
<homepage href=""/>
<description>JSGD</description>
<description kind="short">JSGD</description>
<offline-allowed/>
</information>
<update check="background"/>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.8+"/>
<jar href="http://192.168.0.17:8080/Secu/huella/JSGD.jar" main="true"/>
</resources>
<application-desc main-class="jsgd.JSGD">
<argument>Hooolas</argument>
</application-desc>
</jnlp>
客户端机器错误:
java.lang.NullPointerException
at com.sun.javaws.JnlpxArgs.execProgram(Unknown Source)
at com.sun.javaws.Launcher.relaunch(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[=14=]0(Unknown Source)
at com.sun.javaws.Main.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Missing Application-Name manifest attribute for: http://192.168.0.17:8080/Secu/huella/JSGD.jar
#### Java Web Start Error:
#### null
我已将所有库打包到一个名为 JSGD.jar 的罐子中,其结构是:
JSGD.jar
-jsgd
-META-INF
-org
-SecugenLib
我的jar的URL是:http://192.168.0.17:8080/Secu/huella/JSGD.jar
我已经通过 Netbeans 8.1 打包了我的应用程序
文件->/buil.xml 右键单击 运行 目标->其他目标->package-for-store。
这会在 Store 文件夹中生成一个 jar。这个 jar 具有上述结构。
在我的机器上运行正常(当 codebase 属性是:codebase="http://localhost:8080/Secu/" 当然!)。会有什么问题?
JRE 版本 1.7.0_79-b15(客户端机器)
我使用 Netbeans 8.1
详情:
我已经覆盖 build.xml 添加下一行;将所有 类 装在一个罐子里:
<target name="package-for-store" depends="jar">
<!-- Cambien el valor de esta propiedad para dar el nombre al JAR,
sin la extensión .jar. No debe tener espacios.
<property name="store.jar.name" value="NombreDelJar"/>
-->
<property name="store.jar.name" value="JSGD"/>
<!-- No editar nada después de esta línea -->
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
<attribute name="Application-Name" value="JSGD"/>
<attribute name="Trusted-Only" value="true"/>
<attribute name="Permissions" value="sandbox"/>
<attribute name="Codebase"
value="http://192.168.0.17 http://localhost"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
更新
按照@mosquito-x 的建议,事情似乎变得更好了,但是 Java 7(我也在 jre-8u91 中尝试)阻止了它。
消息是:
Application Blocked by Java Security.
Name: JSGD
From: http://192.168.0.17
Reason: The Java Security Settings have this application from running. You may change this behavior in Java Control Panel.
在 Java 控制面板站点列表中。我添加了这些网站:
http://192.168.0.17:8080
http://192.168.0.17:8080/Secu
http://192.168.0.17:8080/Secu/huella
http://192.168.0.17:8080/Secu/launch
提前致谢!
JNLP :
硬编码 codebase="http://192.168.0.17:8080/Secu/"
仅适用于 localhost
导致java被阻止
原因
Java 进一步增强了安全性,使用户系统不易受到外部攻击。
从Java 7 Update 51开始,Java不允许用户运行未签名(unsigned)的应用程序,self-signed (未经受信任的机构签名)或缺少权限属性。
运行ning 应用程序涉及的风险
未签名的应用程序
默认情况下阻止没有证书的应用程序(即未签名的应用程序)或缺少应用程序名称和发布者信息。 运行 这种应用程序具有潜在的不安全性,存在更高级别的风险。
Self-signed 申请(证书不是来自受信任的机构)
具有 self-signed 证书的应用程序被阻止 ............
Application-Name 属性
Application-Name 属性用于安全提示,为您签名的 RIA 提供标题。建议使用此属性以帮助用户做出信任和 运行 RIA 的决定。该值可以是任何有效的字符串,例如:
Application-Name: 你好世界
如果 JAR 文件清单中不存在 Application-Name 属性 ............
修改清单文件
您在创建 JAR 文件期间使用 m command-line 选项将自定义信息添加到清单。本节介绍 m 选项。
Jar 工具会自动将路径名为 META-INF/MANIFEST.MF 的默认清单放入您创建的任何 JAR 文件中。您可以通过修改默认清单来启用特殊的 JAR 文件功能,例如包密封。通常,修改默认清单涉及将 special-purpose headers 添加到允许 JAR 文件执行特定所需功能的清单。
要修改清单,您必须首先准备一个文本文件,其中包含您希望添加到清单中的信息。然后使用 Jar 工具的 m 选项将文件中的信息添加到清单中。
警告:您用来创建清单的文本文件必须以换行符或回车符结尾 return。 如果最后一行不以换行符或回车符结尾,将无法正确解析它 return。
基本命令格式如下:
jar cfm jar-file manifest-addition input-file(s)
让我们看看这个命令中使用的选项和参数:
The c option indicates that you want to create a JAR file.
The m option indicates that you want to merge information from an existing file ...
The f option indicates that you want the output to go to a file (the JAR file) ...
manifest-addition is the name (or path and name) of the existing text file ....
jar-file is the name that you want the resulting JAR file to have.
The input-file(s) argument is a space-separated list of one or more files ....
我的例子之一
MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Main-Class: DataSummaryApplet
Class-Path: lib/plugin.jar
Application-Name: appJSN
Trusted-Only: true
Permissions: sandbox
Created-By: 1.7.0_51-b13 (Oracle Corporation)
Codebase: http://www.asitexx.com http://localhost
编辑:
1.)
大多数 IDE 创建 jar 文件的人都使用 build.xml。
如果您更改项目中的某些内容,这个文件总是新创建的坏事。
改了就可以测试了:
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
with(根据您的需要更改)
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
<attribute name="Application-Name" value="whatever"/>
<attribute name="Trusted-Only" value="true"/>
<attribute name="Permissions" value="sandbox"/>
<attribute name="Codebase" value="http://www.asitexx.com http://localhost"/>
</manifest>
您可以将域添加到由空格分隔的代码库
2.) 从 JNLP 文件中删除不再需要的代码库
<jnlp spec="6.0+" codebase="http://192.168.0.17:8080/Secu/" href="launch?param1=Hooolas">
至
<jnlp spec="6.0+" href="launch?param1=Hooolas">
希望对您有所帮助,
托马斯
更新
来自评论
You think that I should sign with a certificate?? and How do that?
这不是那么容易,你必须小心按照正确的顺序做每件事。
小心:
仅使用纯 .jar 文件,其中包含所有库,甚至您自己创建的 MANIFEST.FM。
测试一下,打开jar文件必须只包含libs纯文本。
否 SHA-256-Digest
或其他部分如7fnH8YhS5mkYtZoJqiWEI2bfSXSYd2alrKCEdvieyEk
等
然后就可以进行下一步了。
只有两个链接可能对您有帮助。
我有一个由 servlet 动态生成的 JNLP 文件。生成的 JNLP 是:
<jnlp spec="6.0+" href="launch?param1=Hooolas">
<information>
<title>JSGD</title>
<vendor>evconsul</vendor>
<homepage href=""/>
<description>JSGD</description>
<description kind="short">JSGD</description>
<offline-allowed/>
</information>
<update check="background"/>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.8+"/>
<jar href="http://192.168.0.17:8080/Secu/huella/JSGD.jar" main="true"/>
</resources>
<application-desc main-class="jsgd.JSGD">
<argument>Hooolas</argument>
</application-desc>
</jnlp>
客户端机器错误:
java.lang.NullPointerException
at com.sun.javaws.JnlpxArgs.execProgram(Unknown Source)
at com.sun.javaws.Launcher.relaunch(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[=14=]0(Unknown Source)
at com.sun.javaws.Main.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Missing Application-Name manifest attribute for: http://192.168.0.17:8080/Secu/huella/JSGD.jar
#### Java Web Start Error:
#### null
我已将所有库打包到一个名为 JSGD.jar 的罐子中,其结构是:
JSGD.jar
-jsgd
-META-INF
-org
-SecugenLib
我的jar的URL是:http://192.168.0.17:8080/Secu/huella/JSGD.jar
我已经通过 Netbeans 8.1 打包了我的应用程序 文件->/buil.xml 右键单击 运行 目标->其他目标->package-for-store。 这会在 Store 文件夹中生成一个 jar。这个 jar 具有上述结构。
在我的机器上运行正常(当 codebase 属性是:codebase="http://localhost:8080/Secu/" 当然!)。会有什么问题? JRE 版本 1.7.0_79-b15(客户端机器) 我使用 Netbeans 8.1
详情:
我已经覆盖 build.xml 添加下一行;将所有 类 装在一个罐子里:
<target name="package-for-store" depends="jar">
<!-- Cambien el valor de esta propiedad para dar el nombre al JAR,
sin la extensión .jar. No debe tener espacios.
<property name="store.jar.name" value="NombreDelJar"/>
-->
<property name="store.jar.name" value="JSGD"/>
<!-- No editar nada después de esta línea -->
<property name="store.dir" value="store"/>
<property name="store.jar" value="${store.dir}/${store.jar.name}.jar"/>
<echo message="Packaging ${application.title} into a single JAR at ${store.jar}"/>
<delete dir="${store.dir}"/>
<mkdir dir="${store.dir}"/>
<jar destfile="${store.dir}/temp_final.jar" filesetmanifest="skip">
<zipgroupfileset dir="dist" includes="*.jar"/>
<zipgroupfileset dir="dist/lib" includes="*.jar"/>
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
<attribute name="Application-Name" value="JSGD"/>
<attribute name="Trusted-Only" value="true"/>
<attribute name="Permissions" value="sandbox"/>
<attribute name="Codebase"
value="http://192.168.0.17 http://localhost"/>
</manifest>
</jar>
<zip destfile="${store.jar}">
<zipfileset src="${store.dir}/temp_final.jar"
excludes="META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA"/>
</zip>
<delete file="${store.dir}/temp_final.jar"/>
</target>
更新
按照@mosquito-x 的建议,事情似乎变得更好了,但是 Java 7(我也在 jre-8u91 中尝试)阻止了它。 消息是:
Application Blocked by Java Security.
Name: JSGD
From: http://192.168.0.17
Reason: The Java Security Settings have this application from running. You may change this behavior in Java Control Panel.
在 Java 控制面板站点列表中。我添加了这些网站:
http://192.168.0.17:8080
http://192.168.0.17:8080/Secu
http://192.168.0.17:8080/Secu/huella
http://192.168.0.17:8080/Secu/launch
提前致谢!
JNLP :
硬编码codebase="http://192.168.0.17:8080/Secu/"
仅适用于 localhost导致java被阻止
原因
Java 进一步增强了安全性,使用户系统不易受到外部攻击。
从Java 7 Update 51开始,Java不允许用户运行未签名(unsigned)的应用程序,self-signed (未经受信任的机构签名)或缺少权限属性。
运行ning 应用程序涉及的风险
未签名的应用程序
默认情况下阻止没有证书的应用程序(即未签名的应用程序)或缺少应用程序名称和发布者信息。 运行 这种应用程序具有潜在的不安全性,存在更高级别的风险。 Self-signed 申请(证书不是来自受信任的机构)
具有 self-signed 证书的应用程序被阻止 ............
Application-Name 属性
Application-Name 属性用于安全提示,为您签名的 RIA 提供标题。建议使用此属性以帮助用户做出信任和 运行 RIA 的决定。该值可以是任何有效的字符串,例如:
Application-Name: 你好世界
如果 JAR 文件清单中不存在 Application-Name 属性 ............
修改清单文件
您在创建 JAR 文件期间使用 m command-line 选项将自定义信息添加到清单。本节介绍 m 选项。
Jar 工具会自动将路径名为 META-INF/MANIFEST.MF 的默认清单放入您创建的任何 JAR 文件中。您可以通过修改默认清单来启用特殊的 JAR 文件功能,例如包密封。通常,修改默认清单涉及将 special-purpose headers 添加到允许 JAR 文件执行特定所需功能的清单。
要修改清单,您必须首先准备一个文本文件,其中包含您希望添加到清单中的信息。然后使用 Jar 工具的 m 选项将文件中的信息添加到清单中。 警告:您用来创建清单的文本文件必须以换行符或回车符结尾 return。 如果最后一行不以换行符或回车符结尾,将无法正确解析它 return。
基本命令格式如下:
jar cfm jar-file manifest-addition input-file(s)
让我们看看这个命令中使用的选项和参数:
The c option indicates that you want to create a JAR file. The m option indicates that you want to merge information from an existing file ... The f option indicates that you want the output to go to a file (the JAR file) ... manifest-addition is the name (or path and name) of the existing text file .... jar-file is the name that you want the resulting JAR file to have. The input-file(s) argument is a space-separated list of one or more files ....
我的例子之一
MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.3
Main-Class: DataSummaryApplet
Class-Path: lib/plugin.jar
Application-Name: appJSN
Trusted-Only: true
Permissions: sandbox
Created-By: 1.7.0_51-b13 (Oracle Corporation)
Codebase: http://www.asitexx.com http://localhost
编辑:
1.)
大多数 IDE 创建 jar 文件的人都使用 build.xml。
如果您更改项目中的某些内容,这个文件总是新创建的坏事。
改了就可以测试了:
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
with(根据您的需要更改)
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
<attribute name="Application-Name" value="whatever"/>
<attribute name="Trusted-Only" value="true"/>
<attribute name="Permissions" value="sandbox"/>
<attribute name="Codebase" value="http://www.asitexx.com http://localhost"/>
</manifest>
您可以将域添加到由空格分隔的代码库
2.) 从 JNLP 文件中删除不再需要的代码库
<jnlp spec="6.0+" codebase="http://192.168.0.17:8080/Secu/" href="launch?param1=Hooolas">
至
<jnlp spec="6.0+" href="launch?param1=Hooolas">
希望对您有所帮助,
托马斯
更新 来自评论
You think that I should sign with a certificate?? and How do that?
这不是那么容易,你必须小心按照正确的顺序做每件事。
小心:
仅使用纯 .jar 文件,其中包含所有库,甚至您自己创建的 MANIFEST.FM。
测试一下,打开jar文件必须只包含libs纯文本。
否 SHA-256-Digest
或其他部分如7fnH8YhS5mkYtZoJqiWEI2bfSXSYd2alrKCEdvieyEk
等
然后就可以进行下一步了。
只有两个链接可能对您有帮助。