# Problem mit JCurses und NetBeans



## ernst (21. Mrz 2009)

Hallo allerseits,
habe versucht, das folgende einfache Programm unter NetBeans 6.5 und WinXP laufen zu lassen:

[HIGHLIGHT="Java"]package demokurses1;
import jcurses.widgets.Window;

public class MainDemoKurses1 {
  public static void main(String[] para) {
    Window win = new Window( 10,10, 20,20, true, "Win" );
    win.show();
  }
}[/HIGHLIGHT]
Dazu habe ich vorher folgendes gemacht:
Rechter Mausklick auf das Projekt --> Properties --> Libraries -->
Add Jar/Folder -->jcurses.jar auswählen.

Dann mit Umschalttatse+F11 erfolgreich ohne Fehlermeldung kompiliert.
Dann habe ich mit F6 das Programm gestartet.

Problem:
Das Programm läuft ewig, als ob es in einer Endlosschleife ist, ohne irgendeine Fehlermeldung zu bringen. Ich muss es über den Taskmanger beenden.

An was liegt das ?

mfg
Ernst


----------



## Wildcard (21. Mrz 2009)

Was erwartest du zu sehen? Netbeans hat keine echte Konsole, sondern nur ein Java Widget um einfache Ein- Ausgaben darzustellen. Für eine textbasierte GUI brauchst du allerdings eine echte Konsole, also wirst du es auch in einer Konsole starten müssen.


----------



## ernst (21. Mrz 2009)

Wildcard hat gesagt.:


> Was erwartest du zu sehen? Netbeans hat keine echte Konsole, sondern nur ein Java Widget um einfache Ein- Ausgaben darzustellen. Für eine textbasierte GUI brauchst du allerdings eine echte Konsole, also wirst du es auch in einer Konsole starten müssen.



Ok.
Bin auf die Konsole. Dann bin ich in das entsprechende Verzeichnis gewechselt ...\classes\demokurses1
Unter diesem gibt es die Datei 
MainDemoKurses1.class
Dann habe ich auf Konsole eingegeben:
java MainDemoKurses1

Dann kommen die Fehlermeldungen:
Exception in thread "main" java.lang.noClassDefFoundErr: MainDemoKurses1
(wrong name: demokurses1/MainDemoKurses1)
...
could not find the main class: MainDemoKurses1. Programm will exit.


Was muss ich machen, damit mein Programm auch abläuft?


mfg
Ernst


----------



## Wildcard (21. Mrz 2009)

Den richtigen Namen angeben. Die Klasse heißt nicht MainDemoKurses1, sondern demojurses1.MainDemoKurses1


----------



## ernst (21. Mrz 2009)

Wildcard hat gesagt.:


> Den richtigen Namen angeben. Die Klasse heißt nicht MainDemoKurses1, sondern demojurses1.MainDemoKurses1



habe auf Konsole eingegeben:
cd C:\Daten_Austausch\MEINE_SKRIPTE\ProgJava\40_Threads\PROG\demoKurses1\build\classes\demokurses1
Dann eingeben:
demokurses1.MainDemoKurses1

trotzdem kommt die Fehlermeldung:
could not find the main class: 
demokurses1.MainDemoKurses1

Was mache ich falsch?


mfg
Ernst


----------



## mvitz (21. Mrz 2009)

ernst hat gesagt.:


> habe auf Konsole eingegeben:
> cd C:\Daten_Austausch\MEINE_SKRIPTE\ProgJava\40_Threads\PROG\demoKurses1\build\classes\demokurses1
> Dann eingeben:
> demokurses1.MainDemoKurses1
> ...



Da deine Klasse im Package demokurses1 liegt, musst du das folgendermaßen machen:

```
cd C:\Daten_Austausch\MEINE_SKRIPTE\ProgJava\40_Threads\PROG\demoKurses1\build\classes
java demokurses1.MainDemoKurses1
```


----------



## ernst (21. Mrz 2009)

habi55 hat gesagt.:


> Da deine Klasse im Package demokurses1 liegt, musst du das folgendermaßen machen:
> 
> ```
> cd C:\Daten_Austausch\MEINE_SKRIPTE\ProgJava\40_Threads\PROG\demoKurses1\build\classes
> ...


--------------------------------------------------------------
Gut, wenn ich dies aber eingebe kommen folgende Fehlermeldungen:
Exception in thread "main" java.lang.NoClassesDefFoundError: 
jcurses.widgets.Window
at demokurses1.MainDemoKurses1 ....

Ich mache also immer noch etwas falsch.

mfg
Ernst


----------



## Wildcard (21. Mrz 2009)

Classpath settings stimmen nicht. Die JCurses jar(s) müssen mit -cp ... bekannt gemacht werden und AFAIK braucht man für JCurses auch eine native Bibliothek. Je nachdem wie du die lädst, musst du evtl. den java.library.path setzen


----------



## ernst (22. Mrz 2009)

Wildcard hat gesagt.:


> Classpath settings stimmen nicht. Die JCurses jar(s) müssen mit -cp ... bekannt gemacht werden und AFAIK braucht man für JCurses auch eine native Bibliothek. Je nachdem wie du die lädst, musst du evtl. den java.library.path setzen



Es klappt leider noch nicht:


1) Wenn ich folgendes eingebe, 
---------------------------------------------------------------------
cd C:\Daten_Austausch\MEINE_SKRIPTE\ProgJava\40_Threads\PROG\demoKurses1\build\classes
dir
java -classpath C:\Programme\Java\jcurses\lib\jcurses.jar -Djava.library.path=C:\Programme\Java\jcurses\lib\ 
demokurses1.MainDemoKurses1
---------------------------------------------------------------------
erscheint die Fehlermeldung:
could not find the main class:
demokurses1.MainDemoKurses1

2) Wenn ich folgendes eingebe, 
---------------------------------------------------------------------
cd C:\Daten_Austausch\MEINE_SKRIPTE\ProgJava\40_Threads\PROG\demoKurses1\build\classes
dir
java demokurses1.MainDemoKurses1
---------------------------------------------------------------------
erscheint die Fehlermeldung:
Exception in thread "main" java.lang.NoClassesDefFoundError:
jcurses.widgets.Window
at demokurses1.MainDemoKurses1 ....

mfg
Ernst


----------



## andre111 (22. Mrz 2009)

Häng an den cp mal noch ;. am Ende hin


----------



## ernst (22. Mrz 2009)

andre111 hat gesagt.:


> Häng an den cp mal noch ;. am Ende hin



java -classpath C:\Programme\Java\jcurses\lib\jcurses.jar; -Djava.library.path=C:\Programme\Java\jcurses\lib\ demokurses1.MainDemoKurses1

Super, es funktioniert!

Eine Frage noch:
1)
Dass beim Classpath 
jcurses.jar
angegeben werden muss, kommt daher, damit das Package gefunden werden kann, also das Package, das sich in jcurses.jar in gepackter Form befindet.
Ist das richtig?

2) 
Warum muss dann zusätzlich nochmals mit 
-Djava.library.path=
eine weitere Information angegeben werden?


mfg
Ernst


----------



## Wildcard (22. Mrz 2009)

ernst hat gesagt.:


> Dass beim Classpath
> jcurses.jar
> angegeben werden muss, kommt daher, damit das Package gefunden werden kann, also das Package, das sich in jcurses.jar in gepackter Form befindet.
> Ist das richtig?


Nicht unbedingt *das* Package, kann ja durchaus viele Packages darin geben. Eigentlich geht es darum, dass die Klassen gefunden werden, Packages sind nur Namespaces, aber im Prinzip:ja



ernst hat gesagt.:


> Warum muss dann zusätzlich nochmals mit
> -Djava.library.path=
> eine weitere Information angegeben werden?


Weil du native Bibliotheken laden möchtest (.so, .dll,..)


----------



## ernst (22. Mrz 2009)

Wildcard hat gesagt.:


> Nicht unbedingt *das* Package, kann ja durchaus viele Packages darin geben. Eigentlich geht es darum, dass die Klassen gefunden werden, Packages sind nur Namespaces, aber im Prinzip:ja
> 
> 
> Weil du native Bibliotheken laden möchtest (.so, .dll,..)


--------------------------------------------------------------------------------
Warum muss beim Pfad
-Djava.library.path=
ein Verzeichnis angegeben werden, dagegen aber bei
-classpath
eine Datei?

Wenn ich nämlich folgendes eingebe:
java -classpath C:\Programme\Java\jcurses\lib\; -Djava.library.path=C:\Programme\Java\jcurses\lib\ 
bekomme ich eine Fehlermeldung!

Meiner Logik nach müsste man doch bei
-classpath
nur ein Verzeichnis angeben, da dann unter diesem Verzeichnis das oder die entsprechneden packages gesucht werden müssten.

mfg
Ernst


----------



## Ebenius (23. Mrz 2009)

Beim ClassPath gibt man ein Verzeichnis an, wenn sich unterhalb des Verzeichnisses ein Klassen-Baum mit .class-Dateien befindet; in diesem Beispiel muss also das Verzeichnis */opt/myprog/classes* in den ClassPath: 
	
	
	
	





```
/opt/myprog/classes/
 + my
   + pkg
      + MyMainClass.class
      + MyMainClass$1.class
   + otherpkg
      + SomeOtherClass.class
```
JAR-Dateien sind Archive die aufgebaut sind wie Verzeichnisse. Wenn die obige Struktur also innerhalb eines JAva Archives liegt, dann muss statt des Verzeichnisses der Name der Archivdatei im ClassPath angegeben werden.

Ebenius


----------

