1

我有以下 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 应该将参数传递给主方法,指示哪个文件导致应用程序启动,但这没有发生(在 OS X 10.6 上)。我的应用程序main方法得到一个空数组。

可能不相关,我的启动画面不起作用:(

关于让它工作的任何指示?

4

2 回答 2

3

在 Mac OS X 上的捆绑应用程序中,您可以实现com.apple.eawt.ApplicationListener,如Mac OS X 参考库示例中所示,OSXAdapter

handleOpenFile()该示例还通过实现该方法并在其文件中注册支持的文件类型来支持从 Finder 处理Info.plist文档。

附录:com.apple.eawt.ApplicationListener已弃用;而是考虑com.apple.eawt.Application,它提供了getApplication().setOpenFileHandler().

于 2010-05-21T03:28:29.077 回答
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 在上面的页面中,您可以找到有关该服务的示例和简要说明。

我发现的问题是第一次运行应用程序时我看不到文件名。我的意思是,这个服务应该第一次注册应用程序,在这之后,你会看到用于启动应用程序的参数。因此,使用此服务,如果您第一次通过双击关联文件打开您的应用程序,您将错过参数,直到下一次双击它。您的应用程序现在不会再次打开另一个实例,只会将参数传递给实例化的应用程序。

所以,我为此找到了另一种解决方案。

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

其中 ejemlo.ply 是我在 jnlp 描述符中使用的文件扩展名。

好吧,我现在在 OS X 10.6.4 中工作,它似乎可以工作,但此时网络启动并没有给我做文件关联,也没有做已安装应用程序的快捷方式......但也许这个最后一个解决方案适用于两个系统(至少它可以通过我的假超链接工作,如上面打开文件的行)。

于 2011-08-10T16:42:50.130 回答