frogbender
Goto Top

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:

81af9986032b3bd2322be76b58ae751c-javaproblem


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

Content-Key: 65871

Url: https://administrator.de/contentid/65871

Printed on: April 25, 2024 at 04:04 o'clock

Member: Kallinger
Kallinger Aug 10, 2007 at 06:09:09 (UTC)
Goto Top
Servus,

also das ist der CODE !! Der is noch "buggy" :-P
Poste mal den Code, evtl kann ich ja einen Fehler sehen ! Was für ein Tool nutzt du denn zum Prgrammieren ??

__
Grüße Kallinger
Member: AndreasHoster
AndreasHoster Aug 10, 2007 at 06:58:43 (UTC)
Goto Top
Also entweder heißt das Package, welches Du importieren willst nicht so oder die Pfade stimmen nicht, so daß der Kompiler an der falschen Stelle sucht.
Member: Biber
Biber Aug 10, 2007 at 15:18:29 (UTC)
Goto Top
Moin FrogBender,

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
Member: Kallinger
Kallinger Aug 10, 2007 at 15:37:26 (UTC)
Goto Top
Hi,

kann ich doch bitte mal den CODE sehe .. vom JAVA doc... weil ich denke, dass da der Hund begraben liegt !!

__
Güße Kallinger
Member: Frogbender
Frogbender Aug 11, 2007 at 00:17:17 (UTC)
Goto Top
Also immer langsam mit den Pferden :D

Ich Benutze den Jbuilder foundachen(oder so ähnlich, naja die kostenlose versuin halt) 2005 hab ich.
Das Programm zeigt mir auch keinerlei Fehler an die im Queltext sind.

Wenn es andere kostenlose programme gibt postet mal welche ich kenne nur Elpise aber das finde ich nicht so toll. Da es auf english ist und ich in Java noch nciht so gut bin.

Warum bitte -cp ?? Weil -d ging ja auch als ich das selbe programm nur Konsolenbasiert hatte.

So und der Code ja den Code gibts später hab gerade nicht mein Laptop aufgebaut.Werde ihn gleich mal aufbauen... dann gibts entweder per Edit den code oder neuer Post jenachdem ob wer gepostet hat.

EDIT:


package einfacher_taschenrechner ;

import java.awt.* ;
import javax.swing.* ;
import com.borland.jbcl.layout.XYLayout ;
import com.borland.jbcl.layout.* ;
import java.awt.event.ActionEvent ;
import java.awt.event.ActionListener ;
import java.awt.event.KeyEvent ;
import java.awt.event.KeyAdapter ;

/
    • <p>Überschrift: Ein einfacher Taschenrechner</p>
    *
      • <p>Beschreibung: Ein einfacher Taschenrechner mit ein Paar
      • Rechenoperationen</p>
    *
      • <p>Copyright: Copyright (c) 2007</p>
      *
        • <p>Organisation: Private</p>
        *
          • @author Christian Hofmann
          • @version 1.0
        */
        public class Frame extends JFrame
        {
        JPanel contentPane ;
        JButton jButton_divi = new JButton () ;
        XYLayout xYLayout1 = new XYLayout () ;
        JButton jButton_addi = new JButton () ;
        JButton jButton_sub = new JButton () ;
        JButton jButton_multi = new JButton () ;
        JTextField jTextField_eingabeOne = new JTextField () ;
        JTextField jTextField_eingabeTwo = new JTextField () ;
        JTextField jTextField_ausgabe = new JTextField () ;


        private double ergebnis;

        public Frame ()
        {
        try
        {
        setDefaultCloseOperation (EXIT_ON_CLOSE) ;
        jbInit () ;
        }
        catch (Exception exception)
        {
        exception.printStackTrace () ;
        }
        }

        /

              • Initialisierung der Komponenten.
              *
                    • @throws java.lang.Exception
                    */
                    private void jbInit ()
                    throws Exception
                    {
                    contentPane = (JPanel) getContentPane () ;
                    contentPane.setLayout (xYLayout1) ;
                    setSize (new Dimension (400 ,300)) ;
                    setTitle ("Taschenrechner") ;
                    jButton_divi.setEnabled (false) ;
                    jButton_divi.setText ("/") ;
                    jButton_divi.addActionListener (new Frame1_jButton_divi_actionAdapter (this)) ;
                    jButton_addi.setEnabled (false) ;
                    jButton_addi.setText ("+") ;
                    jButton_addi.addActionListener (new Frame1_jButton_addi_actionAdapter (this)) ;
                    jButton_sub.setEnabled (false) ;
                    jButton_sub.setText ("-") ;
                    jButton_sub.addActionListener (new Frame1_jButton_sub_actionAdapter (this)) ;
                    jButton_multi.setEnabled (false) ;
                    jButton_multi.setText ("*") ;
                    jButton_multi.addActionListener (new Frame1_jButton_multi_actionAdapter (this)) ;
                    jTextField_eingabeOne.setText ("Geben Sie eine Zahl ein!") ;
                    jTextField_eingabeOne.addKeyListener (new
                    Frame_jTextField_eingabeOne_keyAdapter (this)) ;
                    jTextField_eingabeOne.selectAll();
                    jTextField_eingabeTwo.setText ("Geben Sie eine zweite Zahl ein!") ;
                    jTextField_ausgabe.setToolTipText ("") ;
                    jTextField_ausgabe.setEditable (false) ;
                    jTextField_ausgabe.setText ("Ergebnis:") ;
                    contentPane.add (jButton_addi ,new XYConstraints (22 ,136 ,67 ,63)) ;
                    contentPane.add (jButton_sub ,new XYConstraints (114 ,136 ,67 ,63)) ;
                    contentPane.add (jButton_multi ,new XYConstraints (207 ,136 ,67 ,63)) ;
                    contentPane.add (jButton_divi ,new XYConstraints (299 ,136 ,67 ,63)) ;
                    contentPane.add (jTextField_eingabeOne ,new XYConstraints (10 ,12 ,381 ,31)) ;
                    contentPane.add (jTextField_eingabeTwo ,new XYConstraints (10 ,53 ,381 ,31)) ;
                    contentPane.add (jTextField_ausgabe ,new XYConstraints (10 ,212 ,381 ,31)) ;
                    }

                    public void jButton_addi_actionPerformed (ActionEvent e)
                    {
                    int eingabe=Integer.parseInt(jTextField_eingabeOne.getText());
                    int eingabe2=Integer.parseInt(jTextField_eingabeTwo.getText());
                    ergebnis=eingabe+eingabe2;
                    jTextField_ausgabe.setText(String.valueOf(ergebnis));
                    }

                    public void jButton_sub_actionPerformed (ActionEvent e)
                    {
                    int eingabe=Integer.parseInt(jTextField_eingabeOne.getText());
                    int eingabe2=Integer.parseInt(jTextField_eingabeTwo.getText());
                    ergebnis=eingabe-eingabe2;
                    jTextField_ausgabe.setText(String.valueOf(ergebnis));
                    }

                    public void jButton_multi_actionPerformed (ActionEvent e)
                    {
                    int eingabe=Integer.parseInt(jTextField_eingabeOne.getText());
                    int eingabe2=Integer.parseInt(jTextField_eingabeTwo.getText());
                    ergebnis=eingabe*eingabe2;
                    jTextField_ausgabe.setText(String.valueOf(ergebnis));
                    }

                    public void jButton_divi_actionPerformed (ActionEvent e)
                    {
                    int eingabe=Integer.parseInt(jTextField_eingabeOne.getText());
                    int eingabe2=Integer.parseInt(jTextField_eingabeTwo.getText());
                    ergebnis=eingabe/eingabe2;
                    jTextField_ausgabe.setText(String.valueOf(ergebnis));

                    }

                    public void jTextField_eingabeOne_keyTyped (KeyEvent e)
                    {
                    if(!Character.isDigit(e.getKeyChar()))
                    {
                    JOptionPane.showMessageDialog(this,"Dies war keine Zahl!/n Bitte geben Sie eine Zahl ein!");
                    e.consume();
                    }
                    jButton_addi.setEnabled(true);
                    jButton_divi.setEnabled(true);
                    jButton_multi.setEnabled(true);
                    jButton_sub.setEnabled(true);
                    }
                    }

                    class Frame_jTextField_eingabeOne_keyAdapter extends KeyAdapter
                    {
                    private Frame adaptee ;
                    Frame_jTextField_eingabeOne_keyAdapter (Frame adaptee)
                    {
                    this.adaptee = adaptee ;
                    }

                    public void keyTyped (KeyEvent e)
                    {
                    adaptee.jTextField_eingabeOne_keyTyped (e) ;
                    }
                    }

                    class Frame1_jButton_divi_actionAdapter implements ActionListener
                    {
                    private Frame adaptee ;
                    Frame1_jButton_divi_actionAdapter (Frame adaptee)
                    {
                    this.adaptee = adaptee ;
                    }

                    public void actionPerformed (ActionEvent e)
                    {
                    adaptee.jButton_divi_actionPerformed (e) ;
                    }
                    }

                    class Frame1_jButton_multi_actionAdapter implements ActionListener
                    {
                    private Frame adaptee ;
                    Frame1_jButton_multi_actionAdapter (Frame adaptee)
                    {
                    this.adaptee = adaptee ;
                    }

                    public void actionPerformed (ActionEvent e)
                    {
                    adaptee.jButton_multi_actionPerformed (e) ;
                    }
                    }

                    class Frame1_jButton_sub_actionAdapter implements ActionListener
                    {
                    private Frame adaptee ;
                    Frame1_jButton_sub_actionAdapter (Frame adaptee)
                    {
                    this.adaptee = adaptee ;
                    }

                    public void actionPerformed (ActionEvent e)
                    {
                    adaptee.jButton_sub_actionPerformed (e) ;
                    }
                    }

                    class Frame1_jButton_addi_actionAdapter implements ActionListener
                    {
                    private Frame adaptee ;
                    Frame1_jButton_addi_actionAdapter (Frame adaptee)
                    {
                    this.adaptee = adaptee ;
                    }

                    public void actionPerformed (ActionEvent e)
                    {
                    adaptee.jButton_addi_actionPerformed (e) ;
                    }
                    }


                    äm.. ist der Code zulang um in mit zu schreiben weil mir aufgefallen ist das als ich das eingefügt habe nichts mehr von meinem Post da stand...
Member: AndreasHoster
AndreasHoster Aug 13, 2007 at 06:22:34 (UTC)
Goto Top
Konsolenbasiert geht, weil Du da die com.borland.jbcl.layout.* Klassen nicht gebraucht hast. Er hat ja deutlich gesagt, daß er die nicht findet.
Also muß man dem Kompiler sagen, wo die liegen.
Member: Frogbender
Frogbender Aug 13, 2007 at 08:48:40 (UTC)
Goto Top
mhh ok ja ... aber wie sagt ich Kompiler das? soll ich da einfach dan dahinther noch den Pfad schreiben oder wie?
Member: AndreasHoster
AndreasHoster Aug 13, 2007 at 09:28:55 (UTC)
Goto Top
Na ja, dafür ist die -cp (Classpath) Option da, die weiter oben erwähnt wurde.
Jetzt muß man nur noch rauskriegen, wo Borland die hinpackt. Irgendwo in einer Jar Datei werden die schon drinsein. Nur wo genau kann ich Dir auch nicht sagen, nehme den JBuilder selber nicht.
Member: Frogbender
Frogbender Aug 29, 2007 at 10:21:55 (UTC)
Goto Top
Also ich bin Ratlos ich hab nun alles versucht aber funktioniert immernoch nicht. Kann mir jemand sagen wie in etwa die Batch Datei aussehen sollte?
Member: AndreasHoster
AndreasHoster Aug 29, 2007 at 11:59:06 (UTC)
Goto Top
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.
Member: Frogbender
Frogbender Aug 29, 2007 at 22:05:24 (UTC)
Goto Top
hab das jetzt gemacht hat gut Funktioniert. Da bei kamen viele Class datein raus. Einmal eine Frame.class und dann für jeden Button jeweils 1.class datei. Wenn ich die Frame.class auführen will kommt folgender fehler.
8a13d9d519d7e5f7a2814ed744f38769-fehler


So und die Batch dazu sieht so aus!

"C:\Programme\Java\jdk1.6.0_01\bin\java" Frame  
if errorlevel 1 goto wait
goto end
:wait
@pause
:end
@pause
Member: AndreasHoster
AndreasHoster Aug 30, 2007 at 08:03:03 (UTC)
Goto Top
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.
Member: Frogbender
Frogbender Aug 30, 2007 at 10:25:04 (UTC)
Goto Top
0hhh langsam wirds dir zu blöde oder? Kommt zumindest so rüber.Naja egal...

Du musst nur verstehen unser Programmierunterricht verläuft so. Unser Lehrer sagt uns was wir heute machen. Dann macht er den Biemer an sagt abtippen erklärt nebenbei. Wenn man Fertig ist meldet man sich. Wenn fehler sind bessert er sie aus sagt noch was dazu was kein schwein versteht und toll fertig das wars. Lerneffect=0. Also nihm es mir nicht über ich darf das alles selbst lernen. Auserdem werden Programme bei uns nur im JBuilder ausgeführt. Also hat niemand ne ahnung von wie man das andersweiter macht.(So nebenbei in der Arbeit, wo wir nur 1 von im 1 lehrjahr in der BS geschrieben haben, waren mehr 4,5 und 6 als 1,2 und 3er. ich hatte durch zufall ne 3(auch nur wegen abspicken) und ich muss sagen jeder hatte die chance abzuspicken,denn in unserem laufwerk war die dokumentation über java
)

Also batchdatei:
"C:\Programme\Java\jdk1.6.0_01\bin\java" -cp "C:\java projekt\einfacher_Taschenrechner\src\einfacher_taschenrechner" Frame  

if errorlevel 1 goto wait
goto end
:wait
@pause
:end
@pause

Dabei kommt wieder ein fehler. Allerdings ist er so Kurz das schreib ich ab.

"Exception in thread "main" java.lang.NoClassDefFoundError: Frame"

Also ich hab keine ahnung was das bedeutet. Ich weiß nur das ich meinem Lehrer mal gehörig auf den sack geh damit der das mal erklärt...
Member: AndreasHoster
AndreasHoster Aug 30, 2007 at 11:32:44 (UTC)
Goto Top
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.
Member: Frogbender
Frogbender Aug 30, 2007 at 15:14:55 (UTC)
Goto Top
Nun gut zu wissen das es nicht unbedingt an mir liegt...

Nun ich habe es nun wenigstens verstanden vorher dachte ich das einfache_taschenrechner wäre ne ordnerbezeichnung weil nach dem Compilieren ein ordner einfacher_taschenrechner entstanden ist.(hat genau immer der name wie das package is.

So batch sieht nun so aus:

"C:\Programme\Java\jdk1.6.0_01\bin\java" -cp "C:\java projekt\einfacher_Taschenrechner\src\einfacher_taschenrechner" einfacher_TaschenrechnerFrame  

if errorlevel 1 goto wait
goto end
:wait
@pause
:end
@pause

Allerdings kommt immernoch die selbe fehlermeldung.Ich hab schon versucht die batch datei in den ornder zu tun wo die .class datei ist beingt nix. Also.. bin ich doch zu doof :-?
Member: AndreasHoster
AndreasHoster Aug 30, 2007 at 18:47:25 (UTC)
Goto Top
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.
Member: Frogbender
Frogbender Aug 30, 2007 at 20:15:33 (UTC)
Goto Top
stimmt was du sagst. Hab die Batch verändert mit dem . und nun kommt

"Exception in thread "main" java.lang.NoSuchMethodError: main"

Das is echt zum verzweifeln hier.. und java soll leicht sein?^^
Member: AndreasHoster
AndreasHoster Aug 31, 2007 at 06:50:27 (UTC)
Goto Top
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.
Member: Frogbender
Frogbender Sep 01, 2007 at 15:58:19 (UTC)
Goto Top
mhh ja das weiß ich dachte nur da is eine dabei.. weil das programm ja im jbuilder ausführbar ist. Hab jetzt versucht die wo einzufügen.. aber überall wo ichs versucht habe kamm das es nen fehler is. Kann mir mal pls einer sagen wohin das muss und wieso?
Member: AndreasHoster
AndreasHoster Sep 04, 2007 at 07:13:11 (UTC)
Goto Top
Sorry, Schreibfehler meinerseits.
Es muß heißen:
public static void main(String args)
Member: Frogbender
Frogbender Sep 04, 2007 at 18:20:10 (UTC)
Goto Top
der sagt mir trotzdem das er immer ein ";" erwartet am ende und das darf nicht sein! Also mhhh ich bin wieder ratlos.
Member: AndreasHoster
AndreasHoster Sep 05, 2007 at 06:16:54 (UTC)
Goto Top
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.