2Danke
ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
708
708
EMPFEHLEN
-
Hallo,
Ich möchte ein Programm, das ich in Eclipse entwickelt habe nun in der Konsole kompilieren und ausführen. Das Programm benutzt eine externe jar für 2 imports und leitet die Klasse daraus ab. Deswegen gebe ich beim compilieren diese als -cp Parameter an. Dadurch kompiliert er ohne Fehler.
Kompilieren:
javac -cp (...jar) TreeBalance.java
Ausführen:
java TreeBalance (param)
Nun funktioniert aber das Ausführen des Programms nicht mehr und gibt die Fehlermeldung
aus.Code :1 2 3 4 5 6 7 8 9
Exception in thread "main" java.lang.NoClassDefFoundError: TreeBalance Caused by: java.lang.ClassNotFoundException: TreeBalance at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) Could not find the main class: TreeBalance. Program will exit.
In Eclipse funktioniert es ohne Probleme...d.h. ich mache wohl etwas beim Kompilieren/Ausführen falsch...
Zusatzinfos:
Umgebungsvariablen sind richtig gesetzt und an der Benennung von Klassen liegt es auch nicht. "main" Methode auch vorhanden.
Prog aufbau:
Code :1 2 3 4 5 6
import ... @SuppressWarnings("deprecation") public class TreeBalance extends DefaultHandler{ ... }
Grüße...Geändert von IluOMat (16.01.12 um 14:35 Uhr)
-
16.01.12 14:51 #2
Hi und willkommen bei tutorials.de,
wenn du eine so gute Entwicklungsumgebung, wie Eclipse schon verwendest, dann solltest du diese auch zum Jar-Datei erstellen benutzen.
Wie funktionierts?
1. Rechtsklick auf den Projektordner
2. "Export..." auswählen
3. Java -> "Runnable Jar file" auswählen
4. Main-Klasse bei Launch configuration raussuchen und auswählen
5. Export destination mit gewünschten Jar-Dateinamen angeben
6. Library handling: "Package required libraries into generated JAR" auswählen
7. Finish - Fertig!
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Danke für die Antwort, aber sie löst mein Problem insofern nicht, als das ich die Konsolenbenutzung nur brauche, weil es eine Abgabe für die Uni ist.
Es ist für diese spezielle Vorlesung (die sich hauptsächlich mit XML beschäftigt) auch wahrscheinlich das einzige Mal, das wir eine Java Klasse abgeben sollen und sie ist sagen wir mal vorsichtig "didaktisch eher schlecht", weswegen dieses Problem erst auftritt
Um konkreter zu werden: Ich leite die TreeBalance Klasse (=Dateiname) von einer Klasse aus einem JDK-Paket ab (org.xml.sax.helpers.DefaultHelper) und benutze später noch eine Klasse aus der Xerces Distribution von Apache (org.apache.xml.serialize.*), die in einer xercesImpl.jar verfügbar sind. Ursprünglich sollten wir einen Serializer aus dem JDK nehmen (rt.jar -> com.sun.org.apache.xml.internal.serialize.*) , die allerdings restricted ist. Also eine Lösung wäre wahrscheinlich auch, wenn ich wüsste, wie ich dieses restricted Pakage benutzen könnte (ich weiß das beides depreciated ist, aber das stört den Prof nicht. Die Serializer aus javax dürfen wir genausowenig, wie auf DOM-basierende Lösungen verwenden -.-).
Es müsste also ja auch irgendwie möglich sein, das ganze Konsolenbasiert mit -cp oder anderen Kompilerdirektiven zu kompilieren/aufzurufen.
-
17.01.12 08:03 #4
Wenn du den Exporter von Eclipse nimmst, sucht der dir schon alle benötigten Libraries zusammen. Vorausgesetzt die benötigten Libraries sind im Build-Path.
Eine weitere Möglichkeit wäre es, einen Ant-Task zu basteln. Bei diesem Verfahren kannst du die benötigten Libraries selber angeben.
Aber du kannst es natürlich auch über Java direkt machen, wobei ich dir das nicht empfehlen würde, da das wohl mit Abstand der schwierigste Weg ist.
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
Also vorneweg: Eclipse in Ehren -> Aber ich verlange von einem Entwickler schon, dass er einen Kompiler benutzen kann. Ist ja eigentlich auch keine Hexerei, man ist einfach zu verwöhnt mit den ganzen IDE's und macht es wirklich auch nur, wenn man in einem Forum ist oder man einen neuen Lehrling bekommt

Package vergessen?java TreeBalance
Hier die Klasse (liegt bei mir unter c:\Temp\tmp\helloworld\HelloWorld.java)
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
package helloworld; import org.xml.sax.helpers.DefaultHandler; public class HelloWorld extends DefaultHandler { public HelloWorld() { System.out.println("Hello World"); } public static void main(String[] args) { new HelloWorld(); } }
hier meine Konsole
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
c:\Temp\tmp>d:\j2ee\jdk\jdk1.6.0_21\bin\javac c:\temp\tmp\helloworld\HelloWorld.java c:\Temp\tmp>java HelloWorld Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld Caused by: java.lang.ClassNotFoundException: HelloWorld at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) Could not find the main class: HelloWorld. Program will exit. c:\Temp\tmp>java helloworld.HelloWorld Hello World
-
@slowfly Danke für die Unterstellung, aber ich kann durchaus mit dem Compiler umgehen, nur hatte ich dieses Problem in der Form bisher nicht. Und ein Package braucht man nicht zwingend, um etwas zu kompilieren... (Auch wenn es guter Stil wäre, aber das ist nur ne Uni-Abgabe und der Prof will explizit das Default Package)
Problemlösung war leider so simpel wie dämlich: Nachdem irgendeine Seite mal wieder Quicktime haben wollte und ich dieses installiert hatte, waren wieder die CLASSPATH-Werte auf QT gesetzt... Und beim Neusetzen auf die JDK-Verzeichnisse u.a. hab ich dann wohl das "." als CLASSPATH Wert vergessen... d.h. sowohl das voranstellen von ".;" an die CP-Var, als auch das ausführen mit "java -cp . TreeBalance <param>" funktioniert.
Ich bedanke mich hiermit bei Apple für dieses super Quicktime-Installer *grrr*
-
Sorry, des war keine Unterstellung an dich, sondern eine Art Aufruf an diejenigen, die dir geraten haben, das ganze in Eclipse zu machen
- oder anders ausgedrückt: Die Fähigkeit ein Problem zu lösen ist das Produkt von Wissen und Erfahrung (oder sagt man die Summe?); Wenn du nicht weisst, wie du Klassen kompilierst und ausführst, weisst du es erst recht nicht, wenn die IDE dich im Stich lässt...
/klug-sh1ce-modus ;P
Ähnliche Themen
-
Eclipse macht keine Ausgaben in der Konsole
Von Karl007 im Forum C/C++Antworten: 4Letzter Beitrag: 23.12.10, 16:14 -
C++ Programm aus Konsole kompilieren
Von Hunter3 im Forum C/C++Antworten: 4Letzter Beitrag: 20.10.10, 23:42 -
Eclipse-Konsole und Zwischenablage
Von Sydney1234 im Forum JavaAntworten: 3Letzter Beitrag: 08.07.09, 14:05 -
PHP in der Konsole ausführen?
Von Kopfballstar im Forum PHPAntworten: 9Letzter Beitrag: 08.06.07, 15:10 -
Excesis Eclipse Projekt - Resourcen zum Lernen von Eclipse
Von Thomas Darimont im Forum JavaAntworten: 0Letzter Beitrag: 12.10.06, 21:33





Zitieren
Login





