tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Fabio Hellmann
  • 1 Beitrag von slowfly
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
708
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    IluOMat IluOMat ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    4
    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
    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.
    aus.

    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)
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    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ß

    Fabio
    IluOMat bedankt sich. 
    Bitte 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.

  3. #3
    IluOMat IluOMat ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    4
    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.
     

  4. #4
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    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ß

    Fabio
     
    Bitte 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.

  5. #5
    slowfly slowfly ist offline Mitglied Bronze
    Registriert seit
    Mar 2009
    Beiträge
    40
    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

    java TreeBalance
    Package vergessen?

    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
    IluOMat bedankt sich. 

  6. #6
    IluOMat IluOMat ist offline Grünschnabel
    Registriert seit
    Jan 2012
    Beiträge
    4
    @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*
     

  7. #7
    slowfly slowfly ist offline Mitglied Bronze
    Registriert seit
    Mar 2009
    Beiträge
    40
    Zitat Zitat von IluOMat Beitrag anzeigen
    @slowfly Danke für die Unterstellung
    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

  1. Eclipse macht keine Ausgaben in der Konsole
    Von Karl007 im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 23.12.10, 16:14
  2. C++ Programm aus Konsole kompilieren
    Von Hunter3 im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 20.10.10, 23:42
  3. Eclipse-Konsole und Zwischenablage
    Von Sydney1234 im Forum Java
    Antworten: 3
    Letzter Beitrag: 08.07.09, 14:05
  4. PHP in der Konsole ausführen?
    Von Kopfballstar im Forum PHP
    Antworten: 9
    Letzter Beitrag: 08.06.07, 15:10
  5. Antworten: 0
    Letzter Beitrag: 12.10.06, 21:33