# Einbinden einer Library in NetBeans



## ThomasB (2. Jun 2011)

Hallo zusammen...

ich bräuchte mal Unterstützung, da ich schon seit Stunden nicht weiter komme. 
Ich bin nicht sonderlich geübt im Umgang mit Java, da ich jobtechnisch im embedded (C/C++/ASM) Bereich angesiedelt bin.

Ich muss für meine Abschlussarbeit ein Thema einer Diplomarbeit von 2005 wieder aufgreifen und der Prof wünscht, dass es in Java geschieht. Der Diplomand hat damals einen Algorithmus für levelplanare Graphen entwickelt und ein Programm geschrieben, dass zu einem gegebenen Graphen (Textdatei) ermittelt, ob der Graph planar dargestellt werden kann.

Ich habe das Programm nun in NetBeans portiert und es läuft. Als SAT-Solver wurde damals ein Linux-Programm verwendet. Da mein Programm aber plattformunabhängig sein soll, habe ich mir eine Java-Implementierung eines SAT-Solvers herausgesucht (SAT4J).

Es gibt nur wenig Dokumentation hierzu und ich glaube, ich scheitere momentan an etwas grundlegendem, kann es aber nicht identifizieren.

Der Reihe nach:

Es gibt einen Getting-Started-Guide (download.forge.objectweb.org/sat4j/getting-started-sat4j-0.3.pdf), ausserdem habe ich die neuste Core-Version herunter geladen (2.3.0)

Um SAT4J zu testen, habe ich, nachdem mein Programm den Graphen analysiert und die Input.cnf-Datei erstellt hat, die Anweisung auf Seite 4 des Guides befolgt.

Sprich: In der Kommandozeile "java -jar org.sat4j.core.jar Input.cnf > Output.txt" eingegeben. Der SAT-Solver hat die Klauseln korrekt überprüft und das Ergebnis stimmt.

Jetzt möchte ich die SAT4J-Library gern in mein Programm einbetten, so dass ich zwischendurch nicht in die Kommandozeile muss. Dazu habe ich diese importiert.

Auf Seite 7 des Guides steht, wie man SAT4J als Library benutzt. Mein Problem ist nun, dass ich keine Klassen aufrufen kann, bzw die meisten Funktionen aus der Library abstract sind. 

Es hapert also quasi schon an der ersten Zeile ... 

Mein Code:

```
import org.sat4j.specs.*;
import org.sat4j.minisat.SolverFactory;

public class SSolver
{   
    ISolver solver = new SolverFactory.newDefault();
```

NetBeans sagt dazu: cannot find Symbol

Wenn ich mir die Datei SolverFactory.java ansehe steht dort folgendes:

```
public static ISolver newDefault() {
        //compiled code
        throw new RuntimeException("Compiled Code");
    }
```

Und das steht in fast allen Dateien.

Kann mir jemand aufzeigen, was ich hier falsch mache?

Ich weiss nicht, ob ich hier wertvolle Informationen vergesse oder so. Wenn ja, dann bitte kurz nachhaken, dann kann ich weitere Auskünfte geben.

Vielen Dank und beste Grüße,
Thomas


----------



## faetzminator (2. Jun 2011)

Damit du dir den Source anzeigen lassen kannst, musst du auch noch *-src.jar in der IDE einbinden. Wie man ein Jar einbindet, hat man ganz schnell gegoogelt. Hier stehts z.B: .jar-Datei in NetBeans einbinden

```
/**
 * Default solver of the SolverFactory. This solver is meant to be used on
 * challenging SAT benchmarks.
 * 
 * @return the best "general purpose" SAT solver available in the factory.
 * @see #defaultSolver() the same method, polymorphic, to be called from an
 *      instance of ASolverFactory.
 */
public static ISolver newDefault() {
	return newMiniLearningHeapRsatExpSimpBiere();
}
```


----------



## L-ectron-X (2. Jun 2011)

NetBeans externe Bibliotheken bekannt machen - Byte-Welt Wiki


----------



## ThomasB (2. Jun 2011)

Hallo ihr zwei und vielen Dank für die Antwort.

Leider bringt mich das irgendwie nicht weiter, denn ich hatte die Libraries bereits eingebunden. Ich habe es jetzt noch mal über die Project-Properties gemacht, aber das Ergebnis ist leider dasselbe. Die *.jar taucht dann bei Projects unter Libraries auf, aber nach wie vor kann ich nicht auf die Konstruktoren der Klassen zugreifen.

Bei Tools->Libraries habe ich bei Classpath die jar hinzugefügt, die bereits vorkompiliert ist und die ich via Kommandozeile auf Funktionstauglichkeit getestet habe (org.sat4j.core.jar). Im Reiter "Sources" habe ich die jar mit den Source-Dateien hinzugefügt (org.sat4j.core-src.jar). Beides unter derselben globalen Library "SAT4J". 

Habt ihr noch andere Ideen, woran es liegen könnte?

Im Notfall könnte ich auch auf die Shell wechseln, denn der Schwerpunkt der Arbeit liegt auf der Visualisierung der Graphen, aber schöner wäre es allemal, wenn ich die Lib einbetten könnte.

Vielen lieben Dank und beste Grüße,
Thomas


----------

