JDIC - Webstart

scMember

Mitglied
Hallo,

ich habe eine Java WebStart Applikation entwickelt, die mit Hilfe der JDIC Library (JDIC 0.9.5) eine Datei über die Standardapplikation öffnet. Dazu lese ich die Aktion, die mit dem Mime Type der Datei verbunden ist, aus und öffne dann die Applikation. Seit der Java Version 6 (revision 24) funktioniert das alles nun nicht mehr. Da ich zusätzlich zu der Datei, die mit der Applikation geöffnet werden soll, auch noch eine SessionID übergeben will, kann ich die neue Java.awt.Desktop.getDesktop().Open() Funktion nicht nutzen.
Hier mein Code:
Java:
    final AssociationService asrv = new AssociationService();
    Association assoc = null;
    
    assoc = asrv.getMimeTypeAssociation( "application/pdf" );

    org.jdesktop.jdic.filetypes.Action action = assoc.getActionByVerb( "open" );
    if( action==null ) {
      // Fehlermeldung ausgeben
      return;
    }
    

    try {
      String[] exec = action.getCommand().split("\\s+"); 
      String[] command = new String[3];
      command[0] = exec[0];
      command[1] = "Test.pdf";
      
      command[2] = "\"/X-Session: Session ID";
      
      Runtime runtime = Runtime.getRuntime();
      runtime.exec( command );
    }catch( Throwable ex ) 
   {

Und die Fehlermeldung in WebStart:

Java:
Exception occurred during event dispatching:
java.lang.NullPointerException
	at org.jdesktop.jdic.filetypes.AssociationService.getMimeTypeAssociation(Unknown Source)


Nachtrag: Starte ich die Anwendung aus Eclipse (java-Application) läuft alles wie geschmiert.

Die JAR Dateien (jDic.jar und jdi-native, jdic_stub_windo.jar) sind alle in meiner jnlp Datei enthalten.



Gibt es eine Alternative zu JDIC, mit dem ich das Problem lösen kann.
Oder: Hat jemand das gleiche Problem und hat eine Lösung dafür gefunden.


DANKE im vorraus.
 

hansmueller

Bekanntes Mitglied
Hallo,

habe zwar noch nie mit JDIC gearbeitet, aber...
Laut Fehlermeldung scheint irgendwas mit dem getMimeTypeAssociation() nicht richtig zu sein.

Nur mal so als Idee. Ersetzte dein
Java:
Association assoc = null;
assoc = asrv.getMimeTypeAssociation( "application/pdf" );
durch
Java:
Association assoc = new Association();
assoc.setMimeType("application/pdf");

MfG
hansmueller
 

hansmueller

Bekanntes Mitglied
Hallo,

noch 'ne Idee: Stimmen auch alle Angaben im der Manifest-Datei?
Nur weil es in der JNLP-Datei steht, heißt es noch lange nicht, daß das Programm weiß, was es verwenden soll.

MfG
hansmueller
 

scMember

Mitglied
Hallo.

Danke für die schnellen Antworten!
Ich bin immer davon ausgegangen das es völlig ausreichend ist, in der JNLP Datei die (Native)lib zu definieren. Der JNLP - Classloader weiß dann schon, wo er die LIBs findet. Deshalb meine Frage: Muss ich noch einen Class Path angeben? Und wo sollte er denn dann "hinzeigen", auf die jdic.dll?

Danke im vorraus!
 

hansmueller

Bekanntes Mitglied
Hallo,

scMember hat gesagt.:
Muss ich noch einen Class Path angeben? Und wo sollte er denn dann "hinzeigen", auf die jdic.dll?

schreibe einfach alle deine Jars zu den Classpath in der Manifest-Datei von deinem Programm.

Wenn das nicht hilft, kannst du dir mal diese Klasse anschauen: libjdic-java 0.9.5-6, classorg_1_1jdesktop_1_1jdic_1_1init_1_1JdicManager.html
Damit kann man anscheinend das Laden der nativen Libs steuern. Vielleicht muß man diese Klasse zuerst aufrufen und sicherstellen, das die richtige Lib auch geladen wurde, bevor man richtig mit JDIC arbeiten kann? (In Bezug auf WebStart.)

MfG
hansmueller
 

scMember

Mitglied
Hallo.

Danke für Deinen Tipp (@hansmueller)!

Nach langem hin und her habe ich es endlich ans Laufen gebracht! Jetzt ist der SourceCode ein Mix aus den alten Klassen der JDIC (Version 0_9_4) und der "neueren" Versionen (0_9_0_5 von Deinem Link). Leider sind die libjdic-Dateien nur für linux etwas. Da aber der Sourcecode der Jdic Lib dabei war, konnte ich das ganze auch für Windows lauffähig machen!
Und siehe da, es funktioniert sogar mit WebStart!

Wenn jemand wissen möchte wie ich das gemacht habe, dann kann er das ja bei diesem Thread sagen!
 

hansmueller

Bekanntes Mitglied
Hallo,

freut mich, daß dir der Link geholfen hat und du es zum Laufen gebracht hast. :toll::applaus:
Es wäre aber trotzdem hilfreich, wenn du deine Lösung etwas genauer skizzierst. Muß jetzt nicht bis ins kleinste Detail sein. Nur so viel, daß jemand der sich mit der Materie beschäftigt eine grobe Richtung hat.

Es könnte ja sein, daß du plötzlich tot umfällst und dann wäre das Wissen verloren.;(
Hier hast du die Möglichkeit, dir ein Denkmal zu setzen.

MfG
hansmueller
 

Ähnliche Java Themen

Neue Themen


Oben