Starthilfe bei JAVA mit Accon AGLink 4

ruka

New member
Beiträge
2
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Für eine mögliche Bachelorarbeit, bei der es darum gehen soll ein Programm zu schreiben, das Daten mit einer SPS austauscht, informiere ich gerade über Möglichkeiten das zu bewerkstelligen. Da das Programm möglicherweise in JAVA geschrieben wird habe ich mir die Demo Version von ACCON AGLink geladen. Leider gibt es gerade für Java dort keine Beispielprogramme und auch eine schlechtere Doku.
Unter NetBeans habe ich einen einfachen Versuch gestartet, ob es möglich ist, die Version mit JGetVersion() in einer Variablen abzuspeichern.
Ich muss dazu sagen, dass ich in JAVA noch ein totaler Anfänger bin, ich habe bis jetzt nur in C/C++ programmiert.

Im Moment habe ich noch keine SPS angeschlossen (oder ist das dafür auch nötig?). Im Ordner der JRE befinden sich auch alle benötigten Dateien (wie z.B. die AGLink40.dll usw.). Auch der Wrapper JAGLink-1.0.jar ist im Libraries-Ordner meines NetBeans-Projektes eingebunden.

Mein Testprogramm main.java sieht im Moment so aus:

Code:
package test2;

public class Main {

    public static void main(String[] args) {
      
    JReturnTypes.Version nr;
    nr = JAGLink.JAGL.JGetVersion();
            
    }

Compilieren funktioniert auch, aber wenn ich das Programm starte, gibt NetBeans folgenden fehler aus:

Code:
Exception in thread "main" com.jniwrapper.LibraryNotFoundException: AGLink40 cause: Das angegebene Modul wurde nicht gefunden.

        at com.jniwrapper.Library.loadLibrary(Native Method)
        at com.jniwrapper.Library.a(SourceFile:139)
        at com.jniwrapper.Library.load(SourceFile:129)
        at com.jniwrapper.Library.getFunction(SourceFile:256)
        at com.jniwrapper.Library.getFunction(SourceFile:274)
        at JAGLink.JAGL.JGetVersion(JAGL.java:4364)
        at test2.Main.main(Main.java:22)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)

Was mache ich falsch? Oder liegt es einfach nur daran, dass ich noch keine SPS angeschlossen habe?
 

Voddy

Member
Beiträge
8
Punkte Reaktionen
1
Hi ruka,
Eine SPS ist erst notwendig, wenn du auch kommunizieren willst. Wenn du dür den Anfang nur die Version der dll willst brauchst du noch keine SPS dazu.
Damit die AGLink40.DLL gefunden wird muss die JVM auch wissen wo sie sich befindet. Standardmäßig hat sich keine Ahnung wo du deine DLL hinpackst.
In NetBeans kannst du das "Working Directy" innerhalb der Projekteigenschaften setzen, welches beim Debuggen mit in den Suchpfad aufgenommen wird.

Der folgende Beitrag bei CodeProject beschreibt eigentlich ganz gut die Grundzüge der Verwendung von C++ Dlls in Java mittels JNI. Dort wird auch beschrieben was man wo in NetBeans einstellen muss um eine DLL zu verwenden und zu finden. Er sagt auch wo die DLL nach Fertigstellung der Anwendung liegen sollte damit sie von Java gefunden wird.

http://www.codeproject.com/Articles/69965/Debugging-a-JNI-Application-using-Netbeans-and-Vis

Mfg,
Voddy
 
OP
R

ruka

New member
Beiträge
2
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hey, vielen Dank.
Der Tip mit dem Working Directory und der Link haben mir sehr geholfen. Ich hab jetzt mal alle benötigten Dateien (also zum Beispiel die "AGLink40.DLL") in den src-Ordner meines NetBeans-Projektes geschoben und diesen als Working Directory angegeben, und jetzt kann ich mir Beispielsweise die Seriennummer mit JGetSerialNumber() ausgeben lassen.
Ich habe mittlerweile auch eine SPS, mit der ich über die AGLink40_Config.exe auch schon eine Verbindung herstellen konnte. Werde das jetzt mal testen.

Wo lege ich denn eigenlich die AGLink40.dll und die AGLink40_Config.exe standartmäßig hin? Die sind ja bei der Installation von AGLink automatisch in das /bin -Verzeichnis der JRE kopiert worden. Sollte man das am besten als Working-Directory angeben?
 

Voddy

Member
Beiträge
8
Punkte Reaktionen
1
Hi, super!

Das Working Directory sollte grundsätzlich innerhalb deiner Projektstruktur festgelegt sein. Dort solltest du dann auch deine Projektfremden Dateien (wie die dlls) hinein kopieren. Allein aus dem Grund, dass du - besonders da du Student bist - das Projekt so einfacher zusammen packen kannst und alle notwendigen Dateien dann auch dabei hast, falls du mal den PC/Laptop wechseln musst. Das Debug/Release Verzeichnis ist da prädestiniert dafür.

Das sich die Dateien im JRE Verzeichnis befinden hat den Hintergrund, dass dieser Pfad von der JVM mit durchsucht wird, wenn du die Anwendung mal ohne Debugger laufen lässt. Grundsätzlich empfehle ich persönlich aber die Dateien in dem Ordner zu lagern, in dem sich auch der Einstiegspunkt deiner Anwendung befindet. (Bitte korrigieren falls ich mich irren sollte)
 
Oben