2010-05-21 4 views
1

У меня есть следующий JNLP:JNLP File Association: Как открыть файл, который был дважды нажат?

<?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 моего приложения.

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

Любые указатели на получение эту работу?

ответ

3

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

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

Addendum: com.apple.eawt.ApplicationListener устарел; вместо этого рассмотрите com.apple.eawt.Application, который предоставляет getApplication().setOpenFileHandler().

+0

Спасибо, мусор, как насчет окон? Я полагаюсь на аргументы метода main()? –

+0

Извините, я никогда не пробовал Windows. FWIW, заставка, похоже, работает над демонстрациями Sun tutorial. – trashgod

+0

Спасибо! на самом деле еще не проверили это, но дадут вам знать, если что-нибудь интересное появится. –

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

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


О файле.

Я работаю прямо сейчас в том же, и, похоже, он работает при добавлении службы из API JNLP SingleInstanceService. Эта служба используется для регистрации приложения как экземпляр singleton. Таким образом, в любое время, когда ваше приложение будет приветствоваться, оно может восстановить параметры, которые использовались для вызова приложения. В этом случае вы можете использовать его для просмотра имени файла, который был дважды нажат. 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, чтобы увидеть экземпляр VM работает, который был вызван, чтобы увидеть параметры запуска приложения. Он имеет код и банку, используемые для этого на этой же странице.

Теперь я могу видеть линию, которая была призывающую приложение, как это:

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

+0

ссылки на приложения не очень хорошо, потому что путь к приложению имел пробелы, поэтому в OSX 10.6 отсутствовали правильные ссылки. –

Смежные вопросы