2010-05-21 12 views
1

J'ai la JNLP suivante:JNLP File Association: Comment ouvrir le fichier sur lequel on a double-cliqué?

<?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> 

La plupart tout fonctionne. Lorsque je double-clique sur un fichier .wlog, il ouvre mon application. Cependant, il n'ouvre pas le bon fichier. J'ai lu quelque part que JNLP était censé transmettre des paramètres à la méthode principale indiquant quel fichier avait provoqué le lancement de l'application, mais ce n'est pas le cas (sur OS X 10.6). J'obtiens un tableau vide à la méthode main de mon application.

Probablement sans rapport, mon écran de démarrage ne fonctionne pas :(

Tous les indicateurs sur l'obtention de ce travail?

Répondre

3

Dans une application livrée sous Mac OS X, vous pouvez mettre en œuvre com.apple.eawt.ApplicationListener, comme le montre la Mac OS X Reference Library exemple, OSXAdapter:

l'échantillon prend également en charge la remise de documents à partir du Finder en mettant en œuvre la méthode handleOpenFile() et l'enregistrement pour sup ported types de fichiers dans son fichier Info.plist.

Addendum: com.apple.eawt.ApplicationListener est déprécié; Au lieu de considérer com.apple.eawt.Application, qui fournit getApplication().setOpenFileHandler().

+0

Merci poubelle, que diriez-vous sur Windows? Est-ce que je compte sur les arguments de la méthode main()? –

+0

Désolé, je n'ai jamais essayé sur Windows. FWIW, l'écran de démarrage semble fonctionner sur les démos du tutoriel Sun. – trashgod

+0

Merci! Je n'ai pas encore testé cela, mais je vous ferai savoir si quelque chose d'intéressant se présente. –

3

A propos de la fenêtre d'accueil

Je pense que l'application manque juste le bon chemin d'accès à vos images. Dans ce cas, comme vous mentionnez le code de base:

<jnlp spec="6.0.10" version="1.63" codebase="http://foo.example.com/msi" href="Foo.jnlp">

et comme vous avez dit dans l'image: <icon href="splash.gif" width="425" height="102" kind="splash"/>

alors, vos images doivent être en http://foo.example.com/msi/splash.gif

Vous voudrez peut-être sûr images sont à cet endroit .... est ce que je pense pourrait être la cause.


À propos de l'association de fichier.

Je travaille en ce moment dans le même, et il semblait fonctionner tout en ajoutant un service de l'API JNLP SingleInstanceService. Ce service est utilisé pour enregistrer l'application comme une instance singleton. Ainsi, chaque fois que votre application est lancée, elle peut récupérer les paramètres qui ont été utilisés pour vous appeler app. Dans ce cas, vous pouvez l'utiliser pour voir le nom du fichier sur lequel vous avez cliqué deux fois. http://download.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/examples.html#SingleInstanceService Dans la page ci-dessus, vous pouvez trouver un exemple et une explication sur ce service.

Le problème que j'ai trouvé avec cela, c'est que je ne pouvais pas voir le nom du fichier la première fois que vous exécutez l'application. Je veux dire, ce service devrait enregistrer l'application la première fois, et après ce temps, vous verrez les paramètres utilisés pour lancer l'application. Ainsi, avec ce service, si vous avez ouvert la première fois votre application en double-cliquant sur votre fichier associé, vous manquerez les paramètres, jusqu'au double-clic suivant. Votre application n'ouvrira plus une autre instance, elle transmettra simplement les paramètres à l'application instanciée. Donc, j'ai trouvé une autre solution pour cela.

http://www.knowledgesutra.com/discuss/tpclso-implement-single-instance-application-java.om

Le garçon dans la page ci-dessus, utilisé un fichier jar à l'intérieur de l'installation de Java pour voir l'instance VM en cours d'exécution qui a été invoquée pour voir les paramètres du lancement de votre application. Il a le code et le pot utilisé pour le faire dans cette même page.

Maintenant, je suis en mesure de voir la ligne qui appelait l'application, comme ceci:

com.sun.javaws.Main -open C:\\JNLP example\\applet-cartoon\\drawingPack\\drawing_monitor\\ejemplo.ply C:\Users\IsraelAltamira\AppData\Local\Temp\javaws23

où ejemplo.ply est l'extension de fichier que j'ai utilisé dans le descripteur de jnlp.

Et bien, je travaille sous OS X 10.6.4 maintenant, et cela semble fonctionner, mais en ce moment le web start ne me fait pas l'association de fichiers, et ne fait pas les raccourcis vers l'application installée .. mais peut-être que cette dernière solution fonctionne pour les deux systèmes (au moins cela fonctionne à partir de mon faux lien hypertexte, comme la ligne ci-dessus pour ouvrir le fichier).

+0

les liens d'application ne fonctionnaient pas bien, car le chemin d'accès à l'application avait des espaces vides, OSX 10.6 manquait donc les liens corrects. –