我正在尝试为我的应用程序显示一个自定义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 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 Web Start应用程序时是否可以强制缓存清除?
我试过下面的代码......
@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) 使用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)
...但理想情况下,每次我向项目添加运行时依赖项时,我都不想记得要更改它.
有没有办法指示插件包含所有运行时依赖项?
手头的情况并不像标题似乎表明的那么简单.
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- 使用我选择的类加载器.
我们最近从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
我想将一些使用Gradle 1.6构建的jar文件捆绑为Java webstart应用程序的一部分.
我现在可以使用证书正确地签署jar,codebase并permissions使用标准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版本使这些属性成为必需属性,否则它会向用户抱怨应用程序的安全性.
但是,我的工件罐子有第三方依赖(例如,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构建脚本:
感谢您的时间和帮助!
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 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_20到1.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
(显示轨道图)
重新加载/重新启动浏览器没有帮助.
我最近开始尝试使用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文件是否正确签名.这是输出:
我将launch.jnlp和mavenprojectHelloWorld-1.0-SNAPSHOT.jar文件复制到我的webhost(http://(my_url)/ maven)并通过启动JNLP文件启动了HelloWorld应用程序.但是,当我这样做时,我收到一条消息'Java …