Java Compilierungsproblem
Ich möchte ein einfaches Java Programm Compilieren aber es treten fehler auf.
HI,
ich habe ein Problem wie oben schon genant möchte ich ein selbstgeschriebenes kleines Javaprogramm Kompilieren aber dabei treten Fehler auf. Leider bin ich Ratlos was die Fehler angeht ich kann diese zwar Übersetzen bzw. mir etwas dabei denken aber leider hilft mir dies nicht weiter.
Erstmal die Fehlermeldungen:
Meine Vermutung ist das er die TextField´s und Buttons nicht findet oder so ähnlich und deswegen meckert. Nur leider weiß ich nicht was er dann noch brauch.
So hier noch meine Batchfile:
Dies habe ich auch nur aus dem Internet.
Ich hoffe ihr könnt mir Helfen.
MfG Frogbender
HI,
ich habe ein Problem wie oben schon genant möchte ich ein selbstgeschriebenes kleines Javaprogramm Kompilieren aber dabei treten Fehler auf. Leider bin ich Ratlos was die Fehler angeht ich kann diese zwar Übersetzen bzw. mir etwas dabei denken aber leider hilft mir dies nicht weiter.
Erstmal die Fehlermeldungen:
Meine Vermutung ist das er die TextField´s und Buttons nicht findet oder so ähnlich und deswegen meckert. Nur leider weiß ich nicht was er dann noch brauch.
So hier noch meine Batchfile:
@echo off
echo Java-Kompilierung gestartet....
"C:ProgrammeJavajdk1.6.0_01injavac" -d . Frame.java
if errorlevel 1 goto wait
goto end
:wait
@pause
:end
Dies habe ich auch nur aus dem Internet.
Ich hoffe ihr könnt mir Helfen.
MfG Frogbender
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 65871
Url: https://administrator.de/contentid/65871
Ausgedruckt am: 25.11.2024 um 06:11 Uhr
22 Kommentare
Neuester Kommentar
Moin FrogBender,
laut Hilfe "javac -help" solltest du noch den Parameter "-cp" benutzen.
Grüße
Biber
laut Hilfe "javac -help" solltest du noch den Parameter "-cp" benutzen.
>D:\Programme\Java\jdk1.6.0_02\bin\javac.exe -help
Usage: javac <options> <source files>
where possible options include:
....
-classpath <path> Specify where to find user class files
-cp <path> Specify where to find user class files
-sourcepath <path> Specify where to find input source files
...
-d <directory> Specify where to place generated class files
-encoding <encoding> Specify character encoding used by source files
-source <release> Provide source compatibility with specified release
-target <release> Generate class files for specific VM version
...
Grüße
Biber
Prinzipiell:
Pfad_von_Java\javac.exe -cp Pfad_zu_den_Borland_Jar -d . Frame.java
Allerdings kann ich Dir nicht sagen, wo das Borland Jar versteckt ist. Und man muß das Jar direkt angeben also z.B. -cp d:\borland\lib\jbcl.jar (die Namen sind jetzt Beispiel).
Bei mir und meiner IntelliJ IDEA Entwicklungsumgebung müsste ich die z:\IDEA\lib\forms_rt.jar einbinden für die GUI Sachen.
Pfad_von_Java\javac.exe -cp Pfad_zu_den_Borland_Jar -d . Frame.java
Allerdings kann ich Dir nicht sagen, wo das Borland Jar versteckt ist. Und man muß das Jar direkt angeben also z.B. -cp d:\borland\lib\jbcl.jar (die Namen sind jetzt Beispiel).
Bei mir und meiner IntelliJ IDEA Entwicklungsumgebung müsste ich die z:\IDEA\lib\forms_rt.jar einbinden für die GUI Sachen.
Wenn man schon Packages verwendet, sollte man auch wissen wie Java Packages verwaltet.
Wir haben das Startdirectory, nennen wir es d:\START.
Dort sind alle Class-Files, die in keinem Packages drin sind (genauer: Sie sind dann im Default Package).
Eine Klasse im Package aa.bb.cc wird dann im Verzeichnis d:\Start\aa\bb\cc erwartet.
Um jetzt eine main Methode in einer Klasse mit Namen Test die im Package aa.bb.cc sich befindet zu starten würde der Aufruf so lauten:
java -cp d:\Start aa.bb.cc.Test
Man ruft also nicht das Class File direkt auf, sondern sagt nur welche Klasse und Java sucht es sich aus seinem Verzeichnisbaum raus.
Also bei Dir:
Package ist einfacher_taschenrechner, Klasse heißt Frame und den Pfad schreibe ich jetzt nicht komplett ab.
java -cp "C:\Dokumente und Einstellungen\Frog\Java Projekte\einfacher_Taschenrecher\src\einfacher_taschenrechner" einfacher_taschenrechner.Frame
Du musst im ClassPath auch wieder die Borland.jar angeben.
Die Pfade wären einfacher, wenn man ein C:\Java_Projekte anlegen würde und nicht es ins Profil reinspeichert, aber das nur nebenbei.
Wir haben das Startdirectory, nennen wir es d:\START.
Dort sind alle Class-Files, die in keinem Packages drin sind (genauer: Sie sind dann im Default Package).
Eine Klasse im Package aa.bb.cc wird dann im Verzeichnis d:\Start\aa\bb\cc erwartet.
Um jetzt eine main Methode in einer Klasse mit Namen Test die im Package aa.bb.cc sich befindet zu starten würde der Aufruf so lauten:
java -cp d:\Start aa.bb.cc.Test
Man ruft also nicht das Class File direkt auf, sondern sagt nur welche Klasse und Java sucht es sich aus seinem Verzeichnisbaum raus.
Also bei Dir:
Package ist einfacher_taschenrechner, Klasse heißt Frame und den Pfad schreibe ich jetzt nicht komplett ab.
java -cp "C:\Dokumente und Einstellungen\Frog\Java Projekte\einfacher_Taschenrecher\src\einfacher_taschenrechner" einfacher_taschenrechner.Frame
Du musst im ClassPath auch wieder die Borland.jar angeben.
Die Pfade wären einfacher, wenn man ein C:\Java_Projekte anlegen würde und nicht es ins Profil reinspeichert, aber das nur nebenbei.
Sorry, die Freundlichkeit meiner Antworten hängt weniger von Deiner Frage als von meinem Stresspegel ab.
Du hast allerdings mein Posting nicht ganz in Deine Batch übernommen.
Da die Klasse Frame im Package einfacher_taschenrechner sich befindet, muß der Aufruf auch nicht Frame, sondern einfacher_Taschenrechner.Frame lauten.
Und der Fehler java.lang.NoClassDefFoundError: Frame bedeutet, daß er die Klasse Frame nicht findet, was daher kommt, daß er eben eine Klasse Frame ohne Package-Definition sucht und es nur eine Klasse einfacher_Taschenrechner.Frame gibt.
Du hast allerdings mein Posting nicht ganz in Deine Batch übernommen.
Da die Klasse Frame im Package einfacher_taschenrechner sich befindet, muß der Aufruf auch nicht Frame, sondern einfacher_Taschenrechner.Frame lauten.
Und der Fehler java.lang.NoClassDefFoundError: Frame bedeutet, daß er die Klasse Frame nicht findet, was daher kommt, daß er eben eine Klasse Frame ohne Package-Definition sucht und es nur eine Klasse einfacher_Taschenrechner.Frame gibt.
2 Punkte:
ich hab mich verschrieben, es muß einfacher_taschenrechner.Frame heißen (Java ist Case-sensitive)
Und Du hast in Deinem Batch den Punkt bei vor Frame vergessen.
Also eigentlich so:
"C:\Programme\Java\jdk1.6.0_01\bin\java" -cp "C:\java projekt\einfacher_Taschenrechner\src\einfacher_taschenrechner" einfacher_taschenrechner.Frame
Aber zur Kontrolle: das Frame.class File müsste sich in:
C:\java projekt\einfacher_Taschenrechner\src\einfacher_taschenrechner\einfacher_taschenrechner\Frame.class befinden. Richtig?
Und ja, da Java die Packages in Ordnerstrukturen auf der Platte abbildet ist es im Prinzip auch eine Ordnerbezeichnung (nur halt etwas mehr).
Öffne einfach mal die rt.jar einer JDK in einem Entpacker, dann siehts Du, daß die ganzen Java Standardklassen in dem Jar ebenfalls in dieser Datei/Ordnerstruktur abgelegt sind.
ich hab mich verschrieben, es muß einfacher_taschenrechner.Frame heißen (Java ist Case-sensitive)
Und Du hast in Deinem Batch den Punkt bei vor Frame vergessen.
Also eigentlich so:
"C:\Programme\Java\jdk1.6.0_01\bin\java" -cp "C:\java projekt\einfacher_Taschenrechner\src\einfacher_taschenrechner" einfacher_taschenrechner.Frame
Aber zur Kontrolle: das Frame.class File müsste sich in:
C:\java projekt\einfacher_Taschenrechner\src\einfacher_taschenrechner\einfacher_taschenrechner\Frame.class befinden. Richtig?
Und ja, da Java die Packages in Ordnerstrukturen auf der Platte abbildet ist es im Prinzip auch eine Ordnerbezeichnung (nur halt etwas mehr).
Öffne einfach mal die rt.jar einer JDK in einem Entpacker, dann siehts Du, daß die ganzen Java Standardklassen in dem Jar ebenfalls in dieser Datei/Ordnerstruktur abgelegt sind.
Java ist so leicht oder schwer wie jede andere Programmiersprache auch. Sie ist nur leicht in dem Sinn, daß diverse Eigenheit wie z.B. Pointer wegelassen wurden, die extrem komplexen und unleserlichen Code produzieren können bei unbedachtem Einsatz.
Ich habe mir Deinen Code jetzt nochmals angesehen, da ist auch kein main Methode drin.
Aber die Startklasse, die man mit dem java.exe startet, muß zwingend eine Methode mit der Signatur public static void main(String argv) haben.
Das ist nämlich die Methode, die als erstes aufgerufen wird. Ohne die geht nichts.
Ich habe mir Deinen Code jetzt nochmals angesehen, da ist auch kein main Methode drin.
Aber die Startklasse, die man mit dem java.exe startet, muß zwingend eine Methode mit der Signatur public static void main(String argv) haben.
Das ist nämlich die Methode, die als erstes aufgerufen wird. Ohne die geht nichts.
Dann fehlt irgendwo ein ;
Bzw. ich habe mich vermutlich nicht klar genug oder zu kurz ausgedrückt.
Wir brauchen eine Methode main, die Signatur der Methode ist public static void main(String args). Eine Methode braucht aber natürlich noch einen Body, in dem drinsteht, was die Methode tun soll.
Das bedeutet in Java Code ausgedrückt:
public static void main(String args) {
// Hier stehen die Java Befehle, die die Main Methode ausführen soll.
}
In Deinem Fall muß die Main Methode ein Objekt vom Typ einfacher_taschenrechner.Frame instanziieren und anzeigen.
Also vermutlich so:
public static void main(String args) {
einfacher_taschenrechner.Frame obj = new einfacher_taschenrechner.Frame();
obj.show();
}
wobei das von der Programmierung der Klasse Frame abhängt.
Bzw. ich habe mich vermutlich nicht klar genug oder zu kurz ausgedrückt.
Wir brauchen eine Methode main, die Signatur der Methode ist public static void main(String args). Eine Methode braucht aber natürlich noch einen Body, in dem drinsteht, was die Methode tun soll.
Das bedeutet in Java Code ausgedrückt:
public static void main(String args) {
// Hier stehen die Java Befehle, die die Main Methode ausführen soll.
}
In Deinem Fall muß die Main Methode ein Objekt vom Typ einfacher_taschenrechner.Frame instanziieren und anzeigen.
Also vermutlich so:
public static void main(String args) {
einfacher_taschenrechner.Frame obj = new einfacher_taschenrechner.Frame();
obj.show();
}
wobei das von der Programmierung der Klasse Frame abhängt.