Problem mit JCurses und NetBeans

Status
Nicht offen für weitere Antworten.

ernst

Top Contributor
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
 
Zuletzt bearbeitet von einem Moderator:
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.
 
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
 
Den richtigen Namen angeben. Die Klasse heißt nicht MainDemoKurses1, sondern demojurses1.MainDemoKurses1
 
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
 
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

Da deine Klasse im Package demokurses1 liegt, musst du das folgendermaßen machen:
Code:
cd C:\Daten_Austausch\MEINE_SKRIPTE\ProgJava\40_Threads\PROG\demoKurses1\build\classes
java demokurses1.MainDemoKurses1
 
Da deine Klasse im Package demokurses1 liegt, musst du das folgendermaßen machen:
Code:
cd C:\Daten_Austausch\MEINE_SKRIPTE\ProgJava\40_Threads\PROG\demoKurses1\build\classes
java demokurses1.MainDemoKurses1
--------------------------------------------------------------
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
 
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
 
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
 
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
 
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

Warum muss dann zusätzlich nochmals mit
-Djava.library.path=
eine weitere Information angegeben werden?
Weil du native Bibliotheken laden möchtest (.so, .dll,..)
 
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
 
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:
Code:
/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
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben