我有以下JNLP:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jnlp PUBLIC "-//Sun Microsystems, Inc//DTD JNLP Descriptor 6.0.10//EN" "http://java.sun.com/dtd/JNLP-6.0.10.dtd">
<jnlp spec="6.0.10" version="1.63" codebase="http://foo.example.com/msi" href="Foo.jnlp">
<information>
<title>Foo</title>
<vendor> Foo Systems, Inc.</vendor>
<homepage href="http://Foo.com"/>
<description>Foo Viewer/Editor Application</description>
<icon href="splash.gif" width="425" height="102" kind="splash"/>
<icon href="Foo.gif" width="64" height="64"/>
<offline-allowed/>
<shortcut>
<desktop/>
<menu submenu="Foo Systems, Inc."/>
</shortcut>
<association mime-type="application-x/wlog" extensions="wlog"/>
<association mime-type="application-x/mplot" extensions="mplot"/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.6+" initial-heap-size="32m" max-heap-size="255m"/>
<jar href="jars_deployment/TimingFramework-1.0.jar"/>
<jar href="jars_deployment/iText-2.1.5.jar"/>
<jar href="jars_deployment/jai_codec.jar"/>
<jar href="Foo.jar"/>
<jar href="jars_deployment/TimingFramework-1.0.jar"/>
<jar href="jars_deployment/iText-2.1.5.jar"/>
<jar href="jars_deployment/jai_codec.jar"/>
<jar href="jars_deployment/jsch-20090402.jar"/>
<property name="apple.laf.useScreenMenuBar" value="true"/>
<property name="apple.awt.graphics.UseQuartz" value="false"/>
<property name="com.apple.mrj.application.apple.menu.about.name" value="Foo"/>
<property name="java.util.logging.config.file" value="/Users/Shared/logging.properties"/>
</resources>
<application-desc main-class="com.prosc.msi.editor.ui.test.Sandbox"/>
</jnlp>
大多数一切都在运作。当我双击.wlog文件时,它会打开我的应用程序。但是,它不会打开正确的文件。我在某处读到JNLP应该将参数传递给main方法,指示哪个文件导致应用程序被启动,但这不会发生(在OS X 10.6上)。我得到了一个空数组到我的应用程序的main
方法。
可能不相关,我的启动画面不起作用:(
关于让这个工作的任何指示?
答案 0 :(得分:3)
在Mac OS X上的捆绑应用程序中,您可以实现com.apple.eawt.ApplicationListener
,如 Mac OS X参考库示例中所示,OSXAdapter:
该示例还支持通过实现
handleOpenFile()
方法并在Info.plist
文件中注册支持的文件类型来从Finder处理文档。
附录:com.apple.eawt.ApplicationListener
已被弃用;而是考虑提供getApplication().setOpenFileHandler()
的{{3}}。
答案 1 :(得分:3)
关于启动窗口
我认为应用程序只是错过了正确的图像路径。
在这种情况下,就像你提到代码库一样:
<jnlp spec="6.0.10" version="1.63" codebase="http://foo.example.com/msi" href="Foo.jnlp">
和你在图片中说的一样:
<icon href="splash.gif" width="425" height="102" kind="splash"/>
然后,您的图片必须在http://foo.example.com/msi/splash.gif
中
你可能想要确保图像在那个地方....正是我所想的可能是原因。
关于文件关联。
我现在正在使用它,并且在从JNLP API SingleInstanceService
添加服务时似乎正在工作。此服务用于将应用程序注册为单例实例。因此,无论何时推出您的应用程序,它都可以检索用于调用您应用程序的参数。在这种情况下,您可以使用它来查看双击的文件的名称。
http://download.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples.html#SingleInstanceService
在上面的页面中,您可以找到有关该服务的示例和breaf解释。
我发现的问题是,我第一次运行应用程序时看不到文件名。
我的意思是,这项服务应该是第一次注册应用程序,在此之后,您将看到用于启动应用程序的参数。因此,如果您通过双击关联文件第一次打开应用程序,使用此服务,您将错过参数,直到下次双击它。您的应用程序现在不会再次打开另一个实例,只是将参数传递给实例化的应用程序。
所以,我找到了另一种解决办法。
http://www.knowledgesutra.com/discuss/tpclso-implement-single-instance-application-java.om
上面页面中的男孩使用Java安装中的jar文件来查看调用的VM实例,以查看应用程序启动的参数。它有代码和jar用于在同一页面中执行此操作。
现在我能够看到正在调用应用程序的行,如下所示:
com.sun.javaws.Main -open C:\\JNLP example\\applet-cartoon\\drawingPack\\drawing_monitor\\ejemplo.ply C:\Users\IsraelAltamira\AppData\Local\Temp\javaws23
其中ejemplo.ply是我在jnlp描述符中使用的文件扩展名。
而且,我现在在OS X 10.6.4中工作,它似乎工作,但此时网络启动不是我的文件关联,并没有做到已安装的应用程序的快捷方式...但也许这最后一个解决方案适用于两个系统(至少它可以从我的假超链接开始工作,就像上面的行一样打开文件)。