代码之家  ›  专栏  ›  技术社区  ›  Sam Barnum

JNLP文件关联:如何打开双击的文件?

  •  1
  • Sam Barnum  · 技术社区  · 14 年前

    我有以下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方法传递参数,指示哪个文件导致了应用程序的启动,但这并没有发生(在OSX10.6上)。我的应用程序的 main 方法。

    可能不相关,我的启动屏幕不工作:(

    有什么办法让它工作吗?

    2 回复  |  直到 14 年前
        1
  •  3
  •   trashgod    12 年前

    在macosx上的捆绑应用程序中,可以实现 com.apple.eawt.ApplicationListener ,如 例子, OSXAdapter :

    该示例还通过实现 handleOpenFile() Info.plist 文件。

    附录: com.apple.eawt.ApplicationListener com.apple.eawt.Application ,提供 getApplication().setOpenFileHandler() .

        2
  •  3
  •   Dharmesh Rupani Aswan    8 年前

    关于飞溅窗口

    在本例中,就像您提到的代码库:

    <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

    你可能想确定图像在那个地方。。。。是我想的原因。


    关于文件关联。

    我现在在同一个环境中工作,它似乎是在从jnlpapi添加服务时工作的 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

    好吧,我现在在OSX10.6.4操作系统中工作,它似乎可以工作,但在这一刻,web开始没有给我做文件关联,也没有给安装的应用程序做快捷方式。。。但最后一个解决方案可能对这两个系统都有效(至少它可以从我的假超链接中工作,就像上面打开文件的那一行)。