2016-06-08 8 views
1

Ich verwende Octave 4.0.1 (GUI-Version) unter Windows 7 und versuche, mit einem DDE-Server zu sprechen. Ich verwende den gleichen Ansatz wie die Antwort auf diese Frage Matlab and JDDE. Hier ist, was ich bisher getan haben:DDE-Schnittstelle für Octave

  1. heruntergeladen und entpackt die JDDE Paket in C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3
  2. Erstellt Dateien javaclasspath.txt und javalibrarypath.txt in meinem `prefdir.
  3. Hinzugefügt C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar zu javaclasspath.txt.
  4. C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3 zu javalibrarypath.txt

Darüber hinaus hinzugefügt, ich habe auch den folgenden Befehl ausführen:

javaaddpath('C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3') 

I Octave haben neu gestartet und versucht, die folgenden:

>> javaaddpath('C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar') 
>> javaclasspath 
    STATIC JAVA PATH 

     C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar 

    DYNAMIC JAVA PATH 

     C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\pretty-tools-JDDE-2.0.3.jar 

>> a = javaObject('com.pretty_tools.dde.client.DDEClientConversation') 

error: [java] java.lang.UnsatisfiedLinkError: no JavaDDE in java.library.path 
>> a = javaObject('com.pretty_tools.dde.client.DDEClientConversation') 

error: [java] java.lang.NoClassDefFoundError: Could not initialize class com.pretty_tools.dde.client.DDEClientConversation 

Die Beschreibung Die Java-Klasse kann here gefunden werden.

Was mache ich falsch? Ist die Fehlermeldung an die Java-Klasse/Paket weitergegeben worden oder gibt es ein grundsätzlicheres Problem? Gibt es eine bessere Schnittstelle zu einem DDE-Server von Octave? Ich sollte hinzufügen, dass ich, obwohl ich mit MATLAB/Octave vertraut bin, nichts über Java oder DDE weiß.

+0

Sie rufen 'javaObject' falsch auf, der Name der Klasse enthält nicht'() '. – carandraug

+0

@carandraug Danke für den Kommentar, bekomme jetzt eine andere Fehlermeldung, wird die Frage entsprechend aktualisieren. – am304

+0

Ich habe es behoben, indem ich 'C: \ Octave \ Octave-4.0.1 \ pretty-tools-JDDE-2.0.3' zu meiner Umgebungsvariablen PATH hinzugefügt habe. Ich denke, dass die Java-Klasse die DLL nicht finden konnte, obwohl sie sich in demselben Verzeichnis befanden, weil dieses Verzeichnis nicht auf dem Pfad war. – am304

Antwort

1

Nun, nach vielen Suchen im Internet, habe ich es geschafft, das Problem zu lösen, damit ich meine eigene Frage beantworten werde.

Die Java-Fehlermeldung Could not initialize class... scheint allgemein anzuzeigen, dass sich entweder die JAR nicht im Klassenpfad befindet (was hier nicht der Fall ist) oder dass die Klassendefinition nicht gefunden werden kann, obwohl sie existierte Kompilierzeit (siehe zum Beispiel "NoClassDefFoundError: Could not initialize class" error). Im Verzeichnis der JAR - Klasse sah ich, dass es auch zwei DLL - Dateien als Teil des Pakets gab, also begann ich eine Ahnung zu bekommen, dass die Java - Klasse, wie sie in der JAR - Datei definiert ist, nicht gefunden werden konnte DLL-Dateien, obwohl sie sich im selben Verzeichnis befanden.

In MATLAB gibt es etwas namens librarypath.txt, wo wir die Verzeichnisse verweisen können, die die notwendigen DLLs enthalten (siehe zum Beispiel this question). Es scheint, dass es in Octave keine solche Option gibt (zumindest keine, die ich finden könnte).

So (und hier kommt die Lösung), habe ich versucht, das Verzeichnis mit den JAR & DLL-Dateien (C:\Octave\Octave-4.0.1\pretty-tools-JDDE-2.0.3\) in die Umgebungsvariable PATH in Windows et voila! Plötzlich konnte ich den Code ohne Fehler ausführen!

Hinweis: für diejenigen, die Neulinge sind wie ich Java, gibt es keine Notwendigkeit, das Verzeichnis zu dem dynamischen Java-Pfad hinzufügen mit javaaddpath, da es in dem statischen Java-Pfad über javaclasspath.txt bereits vorhanden ist. Der Unterschied besteht darin, dass der statische Pfad standardmäßig bei jedem Start von Octave geladen wird, während javaaddpath dem Pfad nur vorübergehend Verzeichnisse hinzufügt (z. B. wenn er nur von einem Skript oder einer Funktion benötigt wird). Eine bessere und detailliertere Erklärung finden Sie unter How to make Java classes available to Octave.