标签: java-web-start

使用JWS JNLP为JavaFX应用程序创建桌面图标

我正在尝试为我的应用程序显示一个自定义destop图标,但由于某些原因,无论我做什么,都会显示相同的默认java图标.我已经尝试了所有我能想到的东西,并将我的jnlp文件与其图标似乎正常工作的其他人进行了比较.根据我读过的所有内容,以下内容应该可以正常工作.但当然,它没有:

<information>
    <title>MikesApp</title>
    <vendor>Mike</vendor>
    <homepage href="http://www.mikesapp.com/"/>
    <description>Mikes App.</description>
    <icon kind="shortcut" href="res/icon64x64.png" width="64" height="64"/>
    <offline-allowed/>
    <shortcut>
        <desktop/>
    </shortcut>
</information>
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激.

java javafx java-web-start

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

基于NetBeans平台构建的Web Start应用程序不会创建桌面快捷方式和开始菜单项

我创建了一个使用Java Web Start启动的NetBeans平台应用程序.我使用Netbeans 6.8中的"Build JNLP Application"命令构建了WAR文件.

我已经将一个桌面快捷方式和菜单项添加到JNLP文件中,但由于某些原因,在启动应用程序时不会创建这些快捷方式和菜单项.

但是,当我去:

控制面板 - > Java - > Internet临时文件 - >查看 - >选择我的应用程序>单击"安装所选应用程序的快捷方式"

桌面和菜单快捷方式是正确创建的.

此外,在Java控制台中,"快捷方式创建"选项设置为以下(默认情况下,我假设):

  • 如果暗示提示用户

下面是我的JNLP文件的片段:

<jnlp spec="6.0+" codebase="$$codebase">   
      <information>
         <title>${app.title}</title>
         <vendor>SomeVendor (Pty) Ltd</vendor>
         <description>Some description</description>
         <icon href="${app.icon}"/>      
         <shortcut online="true">
            <desktop/>
            <menu submenu="MyApp"/>
         </shortcut>   
      </information>
      ...
Run Code Online (Sandbox Code Playgroud)

我很难过.有人对此有解释吗?谢谢

PS这适用于Windows XP和Windows 7. NetBeans版本:6.8

java netbeans java-web-start netbeans-platform

6
推荐指数
1
解决办法
2999
查看次数

更新java Web Start应用程序时是否可以强制缓存清除?

从命令行更新java Web Start应用程序时是否可以强制缓存清除?

java jnlp java-web-start

6
推荐指数
2
解决办法
9137
查看次数

转换期间的常规错误:没有找到适合抓取的ClassLoader

我试过下面的代码......

@Grapes([
    @Grab('org.hsqldb:hsqldb:2.0.0'),
    @GrabConfig(systemClassLoader=true, initContextClassLoader=true)
])
import groovy.sql.Sql
println Class.forName('org.hsqldb.jdbc.JDBCDriver').newInstance()
Run Code Online (Sandbox Code Playgroud)

它适用于groovyConsole,但无法使用Web Start运行.以下是错误消息.

startup failed:
General error during conversion: No suitable ClassLoader found for grab

java.lang.RuntimeException: No suitable ClassLoader found for grab
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:77)
    at org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:102)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:54)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:182)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:190)
    at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:173)
    at groovy.grape.GrapeIvy$chooseClassLoader.callCurrent(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:46)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:133)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:141)
    at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:239)
    at groovy.grape.Grape.grab(Grape.java:141)
    at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:282)
    at org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:302)
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:839)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:544)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:520)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:497)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:306)
    at …
Run Code Online (Sandbox Code Playgroud)

groovy java-web-start

6
推荐指数
1
解决办法
5482
查看次数

Maven-webstart-plugin包含运行时依赖项

使用maven-webstart-plugin构建jnlp时,我发现运行时依赖项未包含在jnlp中.

我正在使用这样的模板:

<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="$jnlpspec" codebase="${url}/${appName}" href="${outputFile}">
    <information>
        <title>${appName}</title>
        <vendor>$project.Organization.Name</vendor>
        <homepage href="${url}/${appName}"/>
        <offline-allowed/>
    </information>
    <security>
        <all-permissions/>
    </security>
    <resources>
        <j2se version="$j2seVersion"/>
        $dependencies
    </resources>
    <application-desc main-class="${main}" />
</jnlp>
Run Code Online (Sandbox Code Playgroud)

如何包含运行时依赖项?好吧,我可以单独包括它们:

<plugin>
    <groupId>org.codehaus.mojo.webstart</groupId>
    <artifactId>webstart-maven-plugin</artifactId>
    <configuration>
      <dependencies>
        <includes>
          <include>groupId:artifactId</include>
          ...
        </includes>
      </dependencies>
      ...
    </configuration>
  </plugin>
Run Code Online (Sandbox Code Playgroud)

...但理想情况下,每次我向项目添加运行时依赖项时,我都不想记得要更改它.

有没有办法指示插件包含所有运行时依赖项?

jnlp java-web-start maven maven-webstart-plugin

6
推荐指数
1
解决办法
2276
查看次数

如何控制哪个ClassLoader加载一个类?

手头的情况并不像标题似乎表明的那么简单.

Java 1.6_17通过JWS运行.

我有一个类,让我们说MyClass,它的一个实例成员变量是来自错误的第三方库的Type,在类初始化期间它动态地尝试加载它自己的一些类Class.forName(String).在其中一种情况下,它恰好动态调用:Class.forName("foo/Bar").这个类名不遵循JLS的二进制名称,最终导致a java.lang.NoClassDefFoundError: foo/Bar.

我们有一个自定义ClassLoader,我已经添加了一个清理方法,ClassLoader.findClass(String)ClassLoader.loadClass(String)修复了这个问题.

我可以称之为: myCustomClassLoader.findClass("foo/Bar")

然后加载类没有任何问题.但即使我提前加载课程,我仍然会在以后获得异常.这是因为在初始化期间MyClass引用Bar- 他们的代码最终Class.forName("foo/Bar")在某处静态块中调用.如果它试图使用的ClassLoader是我的自定义类加载器,那么这实际上是可以的.但事实并非如此.这是com.sun.jnlp.JNLPClassLoader不做这样的卫生,因此我的问题.

我已经确定将Thread.currentThread().getContextClassLoader()其设置为我的自定义类加载器.但是这(如你所知)没有效果.main()由于我阅读的一些东西,我甚至把它设置为我做的第一件事,MyClass.class.getClassLoader()- 是JNLPClassLoader.如果我可以强迫它不是JNLPClassLoader而是使用我的,那么问题就解决了.

如何通过在类初始化期间进行的静态Class.forName("foo/Bar")调用来控制使用哪个ClassLoader加载类?我相信如果我可以强制MyClass.class.getClassLoader()返回我的自定义类加载器,我的问题将得到解决.

如果有人有想法,我愿意接受其他选择.

TL; DR:帮助我强制Class.forName(String)所引用的第三方库中的所有呼叫MyClass- 使用我选择的类加载器.

java jnlp classloader java-web-start dynamic-class-loaders

6
推荐指数
2
解决办法
4435
查看次数

使用Java 7 Update 25的rmi线程中的AppContext为null

我们最近从Update 21更新到Java 7 Update 25,并且当从rmi线程调用SwingUtilities.isEventDispatchThread()时,现在遇到空指针异常,因为AppContext.getAppContext()返回null.

显示java.lang.NullPointerException在sun.awt.SunToolkit.getSystemEventQueueImplPP(未知来源)在sun.awt.SunToolkit.getSystemEventQueueImplPP(未知来源)在sun.awt.SunToolkit.getSystemEventQueueImpl(未知来源)在java.awt.Toolkit.getEventQueue(来源不明)在了java.awt.EventQueue.isDispatchThread(来源不明)在javax.swing.SwingUtilities.isEventDispatchThread(来源不明)在......在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect .NativeMethodAccessorImpl.invoke(来源不明)在sun.reflect.DelegatingMethodAccessorImpl.invoke(来源不明)在java.lang.reflect.Method.invoke(来源不明)在sun.rmi.server.UnicastServerRef.dispatch(来源不明)在阳光下.rmi.transport.Transport $ 1.run(未知来源)at sun.rmi.transport.Transport $ 1.在太阳下的sun.rmi.transport.tcp.TCPTransport.handleMessages(未知来源)的sun.rmi.transport.Transport.serviceCall(未知来源)的java.security.AccessController.doPrivileged(本地方法)中运行(未知来源). rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(来源不明)在sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(来源不明)在java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明)在爪哇. java.lang.Thread.run上的util.concurrent.ThreadPoolExecutor $ Worker.run(未知来源)(未知来源)run0(来源不明)在sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(来源不明)在java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(来自java.lang.Thread.run的未知来源(未知来源)run0(来源不明)在sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run(来源不明)在java.util.concurrent.ThreadPoolExecutor.runWorker(来源不明)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(来自java.lang.Thread.run的未知来源(未知来源)

此错误仅出现在Web启动时,当我们通过IDE运行我们的应用程序时,它很好.

还有其他人遇到过这个吗?有关AppContext的最新更新中有什么变化的想法吗?

似乎其他人在更新后与AppContext有一些相关的问题:https://forums.oracle.com/message/11077767#11077767

java rmi java-web-start

6
推荐指数
1
解决办法
3484
查看次数

使用Gradle将属性添加到jar文件的清单中

我想将一些使用Gradle 1.6构建的jar文件捆绑为Java webstart应用程序的一部分.

我现在可以使用证书正确地签署jar,codebasepermissions使用标准jar任务指定生成的工件的属性和属性,如下所示:

jar {
    manifest.attributes provider: 'tribe7.net'
    manifest.attributes permissions: 'all-permissions'
    manifest.attributes codebase: '*'
}
Run Code Online (Sandbox Code Playgroud)

这是因为Oracle JDK/JRE中的最新Java webstart版本使这些属性成为必需属性,否则它会向用户抱怨应用程序的安全性.

防止RIA被重新利用

但是,我的工件罐子有第三方依赖(例如,slf4j),我还没有找到一种直观的方式将这些属性包含在这样的第三方罐子里.考虑到这一点,我的最终webstart应用程序结构看起来像这样:

./build/webstart/my.jnlp
./build/webstart/lib/myartifactA-1.00.jar
./build/webstart/lib/myartifactB-1.00.jar
./build/webstart/lib/myartifactC-1.00.jar
./build/webstart/lib/slf4j-api-1.7.5.jar
Run Code Online (Sandbox Code Playgroud)

结果是,在运行时,webstart不会抱怨我的工件,但是对于第三方jar这样做是因为他们显然没有清单文件中的属性:

Missing Codebase manifest attribute for:    file:/C:/build/webstart/lib/slf4j-api-1.7.5.jar
Missing Permissions manifest attribute for: file:/C:/build/webstart/lib/slf4j-api-1.7.5.jar
Missing Codebase manifest attribute for:    file:/C:/build/webstart/lib/slf4j-simple-1.7.5.jar
Missing Permissions manifest attribute for: file:/C:/build/webstart/lib/slf4j-simple-1.7.5.jar
Run Code Online (Sandbox Code Playgroud)

由于我不直接控制第三方jar的清单生成,因此我必须以某种方式修改目录中存在的清单文件,build/webstart/lib以明确包含这些属性,以使webstart满意.

有没有办法使用Gradle向jar文件的清单添加属性?如果有人感兴趣,这是我的Gradle构建脚本:

的build.gradle

感谢您的时间和帮助!

UPDATE

彼得的回答奏效了!这是更新的代码:

ant.jar(destfile: it, update: true) {
  delegate.manifest {
    attribute(name: 'permissions', value: 'all-permissions')
    attribute(name: 'codebase', value: '*')
  }
} …
Run Code Online (Sandbox Code Playgroud)

java security java-web-start gradle

6
推荐指数
1
解决办法
8580
查看次数

在浏览器中运行Java applet和JWS应用程序的必要和充分条件?

我已经问过这个并且被大量投票了.不幸的是,我仍然无法解决它.我不知道我做了什么,但迟早我失去了在所有浏览器中运行java applets和java web start应用程序的能力.

这是一个正在发生的事情的例子.

我正在打开applet http://csis.pace.edu/~bergin/Java/applets.htm的页面,并获得以下图片:

在此输入图像描述

标志插件被阻止.我试图取消阻止

在此输入图像描述

这导致另一个对话框

在此输入图像描述

好的我还有另一个

在此输入图像描述

下一个

在此输入图像描述

如果点击

在此输入图像描述

等等.

Applet无法运行.

与PATHes共舞后,Java更新等等,一旦我可以运行applet.但迟早我会再次陷入这个位置.

我想知道,原则上可以排除这种情况吗?

我的意思是我根本不想禁用安全性,但我的意思是,如果我明确允许,一切都应该运行.有可能吗?

UPDATE

首先,我不明白,为什么我不能在过时的java上运行applet如果我想要

我是一个人,机器人应该服从我!:)

假设我希望在旧版本的java上调试我的applet,为什么不呢?

其次,没有关于它认为我有什么版本以及它想要什么版本的信息?

没有这些信息,可能只有版本检测机制中存在错误.

我有Java的多个版本,Program Files因为我是Java开发人员.那我怎么知道它用的是哪一个?

更新2

我从我的最新的Java 1.8.0_201.8.0_25现在情况已经改变了,但小程序窗台无法运行.

证据我有"最新"的java:

在此输入图像描述

我将上面的网站添加到排除列表中的证明:

在此输入图像描述

applet运行的效果:

在此输入图像描述

(applet没有运行)

单击详细信息结果:

在此输入图像描述

(事实上​​没有任何细节)

那么该怎么办?

更新3

此网站无效:http://ssd.jpl.nasa.gov/sbdb.cgi?str = 2012VP113; orb = 1; cov = 0; log = 0; cad = 0#orb

(显示轨道图)

重新加载/重新启动浏览器没有帮助.

java applet java-web-start

6
推荐指数
1
解决办法
642
查看次数

如何使用Maven结合Webstart Maven插件向清单文件添加"所有权限"?

我最近开始尝试使用Maven.作为测试,我正在尝试创建一个简单的JavaFX8 webstart应用程序.

为此,我使用了Netbeans 8中Maven类别下的JavaFX示例.这给了我一个简单的HelloWorld应用程序:

你好,世界

我在我的pom.xml文件中添加了一个名为'jnlp'的新配置文件.这样就可以在构建项目时创建一个JNLP文件(使用webstart maven插件).

....
<profiles>
    <profile>
        <id>jnlp</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>webstart-maven-plugin</artifactId>
                    <version>1.0-beta-6</version>
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>webstart-pack200-impl</artifactId>
                            <version>1.0-beta-6</version>
                        </dependency>
                        <dependency>
                            <groupId>org.codehaus.mojo</groupId>
                            <artifactId>keytool-api-1.7</artifactId>
                            <version>1.5</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>jnlp</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <codebase>http://(my_url)/maven/</codebase> //replaced the url obviously :)
                        <jnlp>
                            <mainClass>com.mycompany.mavenprojecthelloworld.MainApp</mainClass>
                        </jnlp>
                        <pack200>
                            <enabled>false</enabled>
                        </pack200>
                        <sign>
                            <keystore>${project.basedir}/src/main/jnlp/mykeystore</keystore>
                            <keypass>mykeypass</keypass>
                            <storepass>mystorepass</storepass>
                            <alias>myalias</alias>
                            <verify>true</verify>
                        </sign>
                        <verbose>true</verbose>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

当我构建它时,它会在目录中生成一个launch.jnlp文件和一个mavenprojectHelloWorld-1.0-SNAPSHOT.jar文件/target/jnlp.我用jarsigner仔细检查了我的jar文件是否正确签名.这是输出:

的jarsigner

我将launch.jnlpmavenprojectHelloWorld-1.0-SNAPSHOT.jar文件复制到我的webhost(http://(my_url)/ maven)并通过启动JNLP文件启动了HelloWorld应用程序.但是,当我这样做时,我收到一条消息'Java …

java jnlp manifest java-web-start maven

6
推荐指数
1
解决办法
4384
查看次数