我在appliation的jnlp描述符中使用快捷方式标记为我的应用程序创建桌面链接和菜单项.
如果这些快捷方式在客户端上被删除 - 如何在没有用户操作的情况下自动重新安装?是否有jnlp文件的配置选项?
(顺便说一句,我使用的是java6)
我们有一个使用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上运行应用程序.
有没有一个很好的方法来实现这一目标?
我正在创建一个Web Start应用程序,它将受益于一些较新的JVM选项(特别是转义分析,G1垃圾收集器等)
同时,我希望应用程序能够在不支持这些选项的旧JVM上正常工作.
有没有一个很好的方法来实现这一目标?
从Java 7 Update 5开始,我的Java Web Start应用程序正在请求建立连接的权限.该应用程序使用有效证书进行签名.
将显示一个弹出窗口,其中包含以下文本:
该应用程序已请求与www.example.com建立连接的权限.你想允许这个动作吗?[确定] [取消]
在拒绝请求时,我在控制台上获得此跟踪:
Uncaught error fetching image:
java.lang.SecurityException
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at com.sun.javaws.security.JavaWebStartSecurity.checkConnect(Unknown Source)
at sun.awt.image.URLImageSource.checkSecurity(Unknown Source)
at sun.awt.image.ImageRepresentation.imageComplete(Unknown Source)
at sun.awt.image.InputStreamImageSource.errorConsumer(Unknown Source)
at sun.awt.image.InputStreamImageSource.setDecoder(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at sun.awt.image.ImageFetcher.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
这是请求权限时的线程转储:
"Image Fetcher 2" daemon prio=8 tid=0x04198000 nid=0xc24 in Object.wait() [0x0470e000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x1d67b050> (a java.lang.Object)
at java.lang.Object.wait(Object.java:503)
at com.sun.javaws.ui.JavawsSysRun.delegate(Unknown Source)
- locked <0x1d67b050> (a java.lang.Object) …Run Code Online (Sandbox Code Playgroud) 可能重复:
在JDK 1.7中找不到jnlp.jar
对于jdk 1.6,它可以在这里找到(根据我在哪里可以下载JNLP.jar):
${java.home}/sample/jnlp/servlet/jnlp.jar
Run Code Online (Sandbox Code Playgroud)
但是,我在jdk 7 home中看不到这个目录.
它去了哪里?
我们有一个通过使用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) 我的应用程序有一个JNLP包.现在我需要将命令行参数传递给我的应用程序.如何扩展我的JNLP文件以列出命令行参数?
例如,我需要说java main.class arg1 arg2,arg1并且arg2需要作为JNLP文件的一部分提及.
我有一个java applet应用程序,我们的客户可以通过我们的网站访问它.由于Microsoft edge和chrome停止支持java插件,我们将applet转换为通过JNLP和Java Web Start启动,不幸的是,在两个浏览器中,JNLP已下载,客户应双击该文件以启动Java Web Start.
我们的客户对这种行为感到非常失望,我正试图找到解决这个问题的方法.
我有一个使用Java webstart技术的项目.我决定将Java版本从8升级到9.但是,我在编译时面临以下错误:
error: package javax.jnlp is not visible
import javax.jnlp.DownloadServiceListener;
^
(package javax.jnlp is declared in module java.jnlp, which is not in the module graph)
Run Code Online (Sandbox Code Playgroud)
我试图包括C:\Program Files\Java\jdk-9\lib\javaws.jar在类路径中,但仍然存在同样的问题.
我创建了一个简单的测试用例来测试Java 9 Web Start的新模块.遗憾的是,Java 9 Web Start默认情况下不支持像常规Java 9那样的--permit-illegal-access.
Java 9 Web Start假设支持--add-opens(请参阅https://bugs.openjdk.java.net/browse/JDK-8172986).
我正在使用Java 1.9.0_181_ea.
这是我的测试类:
import java.awt.Toolkit;
import java.lang.reflect.Method;
import java.lang.IllegalAccessException;
import java.lang.reflect.InvocationTargetException;
public class Java9BreaksWhenTest {
public static void main(String args[]) throws IllegalAccessException, InvocationTargetException {
System.out.println("Hello World");
// Do some dangerous reflection
Toolkit toolkit = Toolkit.getDefaultToolkit();
Class c = toolkit.getClass();
while(true) {
Method m = null;
try {
m = c.getDeclaredMethod("setDesktopProperty", String.class, Object.class);
} catch (NoSuchMethodException ex) {
c = c.getSuperclass();
if (c!=null)
continue;
} catch (SecurityException …Run Code Online (Sandbox Code Playgroud)