2013-04-10 2 views
0

Je travaille sur un analyseur de fichiers CDF (file mastercard uses) en Java et j'utilise l'API trouvée here. Pour utiliser cette API, vous avez besoin du fichier jar ..Fichier CDF Java Analyse avec UnsatisfiedLinkError

Je ne comprends pas comment je reçois cette exception car elle devrait être gérée dans la méthode getFile() .. Je suis allé sur google et je continue Je ne comprends pas quel est le problème .. si quelqu'un peut me pointer dans la bonne direction ce serait génial. En suivant le stacktrace .. pour moi, il semble que c'est un problème avec la bibliothèque.

Le lien vers l'api se trouve ici: http://cdf.gsfc.nasa.gov/cdfjava_doc/cdf34/

Lorsque vous essayez d'ouvrir un fichier CDF Je reçois cette erreur après l'exécution du programme:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no cdfNativeLibrary in jav 
a.library.path                  
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)     
     at java.lang.Runtime.loadLibrary0(Runtime.java:845)       
     at java.lang.System.loadLibrary(System.java:1084)        
     at gsfc.nssdc.cdf.CDFNativeLibrary.<clinit>(CDFNativeLibrary.java:47)   
     at gsfc.nssdc.cdf.CDF.open(CDF.java:426)          
     at gsfc.nssdc.cdf.CDF.open(CDF.java:385)          
     at FileModel.getFile(FileModel.java:21)          
     at FileModel.main(FileModel.java:9) 

Voici mon code source:

import gsfc.nssdc.cdf.*; 
import gsfc.nssdc.cdf.util.*; 

public class FileModel 
{ 

    public static void main(String[] args) 
    { 
     getFile(); 
    } 

    public static void getFile() 
    { 

     try 
     { 
      CDF cdf = CDF.open("outbound_MidCycle_File.xml"); 
      //System.out.println(cdf.getID()); 
     } 
     catch(CDFException e) 
     { 
      System.out.println("ERROR Cannot open CDF File"); 
     } 
     catch(Exception e) 
     { 
      System.out.println("ERROR"); 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 

    } 

} 

Les commandes I exécuter sont les suivantes:

javac -cp '.:cdfjava.jar' FileModel.java 
java -cp '.:cdfjava.jar' FileModel 
+1

Ceci est lié à une API native dans votre bibliothèque. Est-ce que ça vient avec n'importe quel 'dll 'de' so' fichiers? Ceux-ci doivent être inclus dans 'java.library.path'. –

+0

Il ne vient pas avec des fichiers dll: \ – RyanDawkins

Répondre

0

Cela ne résout pas le problème dans son ensemble, mais devrait résoudre une partie du mystère:

UnsatisfiedLinkError est un Throwable, pas Exception. C'est pourquoi vous codez ne l'attrape pas. Remplacez catch(Exception e) par catch(Throwable e).

2

Vous devez toujours installer CDF Software Distribution sur le système avant d'utiliser l'API. Téléchargez la version appropriée de http://cdf.gsfc.nasa.gov/html/sw_and_docs.html et installez-le - cela devrait éclaircir le problème "Native Library" (ou du moins l'a fait pour moi).