Ассоциация файлов JNLP: Как открыть файл, по которому дважды щелкнули? - PullRequest
1 голос
/ 21 мая 2010

У меня есть следующий 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 моего приложения.

Возможно, это не связано, мой заставка не работает: (

Есть ли какие-нибудь указатели на то, как это работает?

Ответы [ 2 ]

3 голосов
/ 10 августа 2011

О всплывающем окне

Я думаю, что приложение просто отсутствует правильный путь к вашим изображениям. В этом случае, как вы упомянули кодовую базу:

<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

Мальчик на странице выше использовал jar-файл изнутри установки Java, чтобы увидеть запущенный экземпляр виртуальной машины, который был вызван, чтобы увидеть параметры запуска вашего приложения. У него есть код и банка, используемые для этого на этой же странице.

Теперь я вижу строку, которая вызывает приложение, например:

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, и, похоже, это работает, но в этот момент веб-запуск не связывает меня с файлами и не выполняет ярлыки для установленного приложения ... но, возможно, это последнее решение работает для обеих систем (по крайней мере, оно работает из моей фиктивной гиперссылки, как в строке выше, чтобы открыть файл).

3 голосов
/ 21 мая 2010

В прилагаемом приложении в Mac OS X вы можете реализовать com.apple.eawt.ApplicationListener, как показано в Справочная библиотека Mac OS X , OSXAdapter :

Образец также поддерживает передачу документов из Finder путем реализации метода handleOpenFile() и регистрации поддерживаемых типов файлов в его файле Info.plist.

Приложение: com.apple.eawt.ApplicationListener устарело; вместо этого рассмотрим com.apple.eawt.Application, что дает getApplication().setOpenFileHandler().

...