Laufzeitfehler

brasilian

Grünschnabel
Hallo,

ich bin in Java noch ein ziemlicher Anfänger und beschäfftige mich gerade mit Eingabefeldern. Mit dem unteren Programm möchte ich zwei Eingabefelder miteinander addieren und die Summe im dritten Ein(Aus)gabe-Feld anzeigen.

Ich habe das Programm fehlerfrei compiliert bekommen. Will ich es jedoch starten, erhalte ich immer die Meldung TextAdd.java mit Laufzeitfehlern.

Ich kann somit das Programm nicht simulieren.

// Datei: TextAdd.java
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class TextAdd extends JPanel implements ActionListener {
private JTextField t1,t2,t3;
int a,b,c;
String texta,textb,textc;

public static void main(String[] args)
{
JFrame frame = new JFrame("Textfeld-Addition");
frame.getContentPane().add(new TextAdd());
frame.setSize(300, 200);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} );
}

public TextAdd()
{
t1 = new JTextField(10);
texta=t1.getText();
a = Integer.parseInt(texta);

t2 = new JTextField(10);
textb=t2.getText();
b = Integer.parseInt(textb);

t3 = new JTextField(10);
c=a+b;
textc=String.valueOf(c);
t3.setText(textc);
}

public void actionPerformed(ActionEvent e)
{
JTextField t = (JTextField)e.getSource();
if (t == t1)
{
System.out.println("Feld 1: " + t1.getText());
t2.requestFocus();
}
else if (t == t2)
{
System.out.println("Feld 2: " + t2.getText());
t3.requestFocus();
}
else
{
System.out.println("Feld 3: " + t3.getText());
t1.requestFocus();
}
}
}

Vielen Dank im Vorraus für eure Hilfe

Brasilian
 
hi,

ich bin eigentlich auch noch ein anfaenger (vorallem auf dem gebiet der gui), hab aber an dienem programm mal einwenig herumgebastelt und bin auf folgendes gekommen:


Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TextAdd extends JFrame {
    private JFrame frame;
    private JPanel panel = new JPanel();
    private JTextField t1 = new JTextField(10);
    private JTextField t2 = new JTextField(10);
    private JTextField t3 = new JTextField(10);
    private JButton knopf = new JButton("addieren");
    int a,b,c;
    String texta,textb,textc;
    
    public static void main(String[] args) {
        TextAdd myTextAdd = new TextAdd();
        myTextAdd.setVisible(true);
    }
    
    public TextAdd() {
        JFrame frame = new JFrame("Textfeld-Addition");
        setSize(300, 200);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        } );
        getContentPane().add(panel);
        panel.add(t1);
        panel.add(t2);
        panel.add(t3);
        panel.add(knopf);
        knopf.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                doAddieren();
            }
            }); 
        }
        public void doAddieren(){
            texta = t1.getText();
            textb = t2.getText();
            a = Integer.parseInt(texta);
            b = Integer.parseInt(textb);
            c = a + b;
            t3.setText("Ergebnis:" + a + " + " + b + " = " + c );
        } 
    }

ich hatte bei deiner version genau den selben fehler, weiss aber ehrlich gesagt nicht an was es genau lag.

naja ich hoffe ich konnte einwenig weiterhelfen

g heppi
 
Ich danke dir.

Nun funktioniert die Anwendung (laufzeit)fehlerfrei.

Ich habe nur eine Frage, bzw. verstehe ich nicht ganz was eine Zeile bedeutet.

TextAdd myTextAdd = new TextAdd(); // ? => kenne ich nicht

Ich freue mich jedoch sehr über deine Hilfe, und hoffe dass ich vielleicht dir auch mal weiterhelfen kann.

Mir ist gerade noch aufgefallen, dass mein Fenster "namenlos" ist.

Mich wundert dass, der Befehl

JFrame frame = new JFrame("Textfeld-Addition");

wohl nicht 100% zieht, da doch sonst das Fenster "Textfeld-Addition" heißen müßte. Oder bin ich da als Anfänger mal wieder in ein Fettnäpfchen getreten ?
 
Zuletzt bearbeitet:
hmm jo stimmt da fehlt noch n titel, aber den kann man ganz einfach einfuegen:

bei meinem beispiel werden alle die komponenten im konstruktor hinzugefuegt (also in public TextAdd() { ) da ich der klasse ein JFrame vererbt hab (extends JFrame ) kann ich nun im konstruktor die methoden eines JFrames nutzen, zum beispiel auch: setTitle("Textfeld-Addition"); um den titel zu setzen.

das TextAdd myTextAdd = new TextAdd(); macht eigentlich nichts anderes als eine neue instanz der klasse TextAdd (dabei wird ja der default-konstruktor ausgefuehrt), somit macht es mir ein JFrame mit den gewuenschten komponenten. schlussendlich macht es eigentlich das gleiche wie das
JFrame frame = new JFrame("Textfeld-Addition"); ( war im ersten code ausversehen noch in dem Konstruktor TextAdd() drinne, die hab ich nun im code untendran raus genommen).


hier nochma mit titel :>
Code:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TextAdd extends JFrame {
    private JFrame frame;
    private JPanel panel = new JPanel();
    private JTextField t1 = new JTextField(10);
    private JTextField t2 = new JTextField(10);
    private JTextField t3 = new JTextField(10);
    private JButton knopf = new JButton("addieren");
    int a,b,c;
    String texta,textb,textc;
    
    public static void main(String[] args) {
        TextAdd myTextAdd = new TextAdd();
        myTextAdd.setVisible(true);
    }
    
    public TextAdd() {
        setTitle("Textfeld-Addition");
        setSize(300, 200);
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        } );
        getContentPane().add(panel);
        panel.add(t1);
        panel.add(t2);
        panel.add(t3);
        panel.add(knopf);
        knopf.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                doAddieren();
            }
            }); 
        }
        public void doAddieren(){
            texta = t1.getText();
            textb = t2.getText();
            a = Integer.parseInt(texta);
            b = Integer.parseInt(textb);
            c = a + b;
            t3.setText("Ergebnis:" + a + " + " + b + " = " + c );
        } 
    }

hmm und wieso das: JFrame frame = new JFrame("Textfeld-Addition"); weiss ich im moment auch nich wirklich, ich mach meine GUIs eigentlich meistens mit Netbeans, und wenn ich GUIs sonst mache dann bastel ich die irgendwie zusammen so wie die obendrann ;>

g. heppi
 
Zurück