我有一个应用程序,使用java web start启动Swing gui.用户安装了4个版本的java 1.6(1.6.0.3,1.6.0.5,1.6.0.7.1.6.0.11)
Webstart正在选择java版本1.6.0.11,但JAVA_HOME设置为java版本1.6.0.3.这会导致webstart出现任何潜在问题吗?
我想利用java web start优势,但我不希望我们的客户面对java web开始加载屏幕,它看起来很丑......而且客户可能也没有安装jre和jre-install可能对他们挑剔..所以我想使用installanywhere将我们的应用程序和jre打包到安装文件中.当用户启动我们的程序时,我想调用web start API来完成版本比较之类的工作,并提供自己的加载屏幕..那么,我可以在我的程序中调用web启动吗?以及如何?最好的问候LJW
我有一个java应用程序,它读取包含一堆.jar文件的资源文件夹.对于其中一些.jar文件,必须根据默认架构创建相应的JNLP文件并将其存储在同一目录中.
有没有很好的方法从Java应用程序创建这些JNLP文件(并且可能会将.jar文件中的一些数据添加到jnlp节点中)?
我正在努力使用JNLP自动化相同的Java代码执行,我惊讶地发现jawaws没有给我一个有效的返回代码.
原始执行行是:
javaws -wait http://example.com:666/missing.jnlp
Run Code Online (Sandbox Code Playgroud)
这确实显示了一个丑陋的窗口,"无法启动应用程序".信息.
你可以想象我尝试使这不需要GUI并尝试:
javaws -wait -Xnosplash -import -silent http://example.com:666/missing.jnlp
Run Code Online (Sandbox Code Playgroud)
但即使这个命令失败,它仍然会返回0,成功.
怎么解决这个?
谁能解释一下这里发生了什么?
seneca:~ kiewie$ java -version
java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07-334-10M3326)
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02-334, mixed mode)
seneca:~ kiewie$ echo $JAVA_HOME
/System/Library/Frameworks/JavaVM.framework/Home
seneca:~ kiewie$ uname -a
Darwin seneca 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386
seneca:~ kiewie$ javaws
Java Web Start splash screen process exiting ...
Can not find message file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
当我用JNLP-File调用javaws时,会发生同样的事情.
谢谢你的帮助
当我打开一些Java应用程序,特别是从Java Web Start启动的示例时,我会经常看到/覆盖关闭按钮旁边的感叹号,具体取决于窗口大小.实际上有点担心.
它是什么意思,它的功能是什么?
我有一个Amazon S3存储桶,用于存放我的Java应用程序的.jar文件.我有一个Web服务器,可以动态创建并提供一个JNLP文件,该文件指向此代码库的Amazon S3存储桶.
JNLP似乎能够从我的Amazon S3存储桶中正确下载.jar文件.但是在尝试启动时,我得到以下异常:
ExitException[ 3]java.io.IOException: Cannot find cached resource for URL: http://s3.amazonaws.com/....
at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
Java是否使用IP地址缓存.jar文件?在java日志的早期,打印以下内容:"cache:CacheEntry IP mismatch:207.171.189.80!= 207.171.187.117".两个IP都解析为S3.
我有点惊讶我遇到了这个问题并且认为这是一个常见的问题但是找不到一个好的解决方案.如果我将IP地址粘贴在JNLP文件中:
<jnlp spec="1.0" xmlns:jfx="http://javafx.com" codebase="http://207.171.189.80/...
Run Code Online (Sandbox Code Playgroud)
代替:
<jnlp spec="1.0" xmlns:jfx="http://javafx.com" codebase="http://s3.amazonaws.com/...
Run Code Online (Sandbox Code Playgroud)
它每次都有效.否则,它通常会因上述异常而中断.
有谁知道这个很好的解决方案?谢谢.
升级到Java 7(Oracle/Sun JDK,而不是OpenJDK),如果我尝试在Web Start下测试我的应用程序javaws,它会告诉我"应用程序被安全设置阻止".我可以使用Java控制面板来降低从高到中的安全性以使其工作(它询问我是否要启动未签名的应用程序),但这也降低了我的Web浏览器的安全级别.是否有任何系统属性可以让我做javaws -J-Dkey=value一个javaws实例放松或忽略安全性将启动(但保持安全性相同)?
编辑:如果有人能指出我的Java 7源代码的javaws位置,我很乐意通读代码来找到答案.
编辑2:当我通过Java控制面板将Java安全性设置为中等时,启动我的应用程序并javaws在其中询问我是否要运行未签名的应用程序; 这就是我要复制的内容.控制面板通过将系统属性添加deployment.security.level=MEDIUM到文件来将安全性设置为中等~/.java/deployment/deployment.properties.我尝试了两种方法来使用它:
1)-J-Ddeployment.security.level=MEDIUM转到javaws.这导致我的应用程序完全启动,没有它问我是否要运行未签名的应用程序.
2)通过-J-Ddeployment.system.config=~/.java/deployment/FOO.properties,手动添加FOO.properties普通deployment.properties文件的副本deployment.security.level=MEDIUM.再次,这导致我的应用程序完全启动,而没有它问我是否要运行未签名的应用程序.
编辑3:请注意,我使用的是Oracle/Sun JDK,而不是OpenJDK.
更新Java 8u141后,由jnlp运行的java web start应用程序停止工作.不要下载该应用程序.并在下面抛出这些例外.有人能帮我吗?
com.sun.deploy.net.JARSigningException: Could not verify resource signature: http://www.example.com/myjar.jar
at com.sun.deploy.security.JarVerifier.authenticateJarEntry(Unknown Source)
at com.sun.deploy.security.EnhancedJarVerifier.validate(Unknown Source)
at com.sun.deploy.cache.CacheEntry.processJar(Unknown Source)
at com.sun.deploy.cache.CacheEntry.access$2700(Unknown Source)
at com.sun.deploy.cache.CacheEntry$7.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.deploy.cache.CacheEntry.writeFileToDisk(Unknown Source)
at com.sun.deploy.cache.CacheEntry.writeFileToDisk(Unknown Source)
at com.sun.deploy.cache.Cache.downloadResourceToTempFile(Unknown Source)
at com.sun.deploy.cache.Cache.downloadResourceToCache(Unknown Source)
at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
其他:
java.lang.SecurityException: digest missing for org/apache/commons/httpclient
at sun.security.util.ManifestEntryVerifier.verify(Unknown Source)
at java.util.jar.JarVerifier.processEntry(Unknown Source) …Run Code Online (Sandbox Code Playgroud) 我正在尝试调用Java Webstart,它使用"-open"运行时选项将参数发送到webstart应用程序.我引用了这个问题:将命令行参数传递给javaws(Java WebStart)可执行文件,但是这种语法似乎不适用于多个参数.它似乎可以找到一个参数.
当我运行"javaws URLtoMyJNLP"时,它运行应用程序很好,当我通过"javaws -open arg URLtoMyJNLP"发送单个参数时,它似乎也工作,并且arg到达应用程序.当我尝试运行"javaws -open arg arg arg arg URLtoMyJNLP"时,它表示提供了无效的参数.我在ProcessBuilder.command中输入命令.
InvalidArgumentException[ Invalid arguments supplied: {hello, jnlp, launch.jnlp, 123 }]
Run Code Online (Sandbox Code Playgroud)
对于上面的输出我尝试发送"javaws -open abc 123 hello launch.jnlp"
有任何想法吗?
代码请求.由于是PoC,它过于简单化了.
private static void launchApp(String appName, String appPath, String... args)
{
logger.debug("Launching application: " + appName);
Properties props = System.getProperties();
ArrayList<String> fullCmdString = new ArrayList<String>();
logger.debug("http://" + System.getProperty("jnlp.serverip") + ":" + System.getProperty("jnlp.serverport") + "/FB2HMI/" + appPath);
if (args.length > 0)
{
fullCmdString.add("javaws");
fullCmdString.add("-open");
}
for (String arg : …Run Code Online (Sandbox Code Playgroud)