Problem mit JTextField

salzkrebs

Mitglied
Hallo alle
ich habe ein Problem.
Ich will einen Rechnen, 2 Textfelder und 2 Buttons.
Alles gut aber als ich die listener für die Buttons mache und dann teste bekomm ich eine NullPointerException.
Code:
public void fzuC()
{
	String a="";
	double c;
	c=((Double.parseDouble(field2.getText())-32)*5)/9;
	a=a+c;
	field.setText(a);
}
also 1. Textfeld soll celsius sein zweites Fahrenheit darunter sind 2 Buttons wenn ich einen drücke nimmt der den Wert aus dem einen Textfeld um ihn umzurechnen auf das andere Textfeld.
Hoffe ihr könnt mehr helfen
mfg und schonmal danke
salzkrebs
 
Was ist den wenn du ein Wort eingibst das wird dann eine Exception werfen! Du kannst kein Wort in ein Double umwandeln. Es kann aber genauso gut an einer anderen Stelle liegen! Der Code den du da postest ist nicht sonderlich hilfreich zumal du nicht sagst was du genau eingibst.

So geht es

Java:
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Salzkrebs extends JFrame {

	Container cp;
	private JButton jb_eins, jb_zwei;
	private JTextField jtf_eins, jtf_zwei;

	public Salzkrebs() {
		
		jtf_eins = new JTextField();
		jtf_zwei = new JTextField();
		
		jb_eins = new JButton("eins");				jb_eins.addActionListener(new Action());
		jb_zwei = new JButton("zwei");				jb_zwei.addActionListener(new Action());

		cp = getContentPane();
		cp.setLayout(new GridLayout(2,2));
		cp.add(jtf_eins);
		cp.add(jtf_zwei);
		cp.add(jb_eins);
		cp.add(jb_zwei);
		
		this.setSize(300, 300);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);

	}
	
	public static void main(String[] args) {
		new Salzkrebs();
	}

	private class Action implements ActionListener {
		public void actionPerformed(ActionEvent event) {
			if (event.getSource().equals(jb_eins)){
				fzuC();
			}
		}
	}
	
	public void fzuC() {
		
		try {
			String a = "";
			double c = Double.parseDouble(jtf_eins.getText());
			c = ((c - 32) * 5) / 9;
			a = a + c;
			jtf_zwei.setText(a);
		} catch (Exception Fehler) {
			System.out.println("Sie haben keine Zahl eingegeben!");
		}
	}
}

Du könntest das ganze noch in einer while-Schleife packen um sicherzugehen das eine richtige Eingabe getroffen wurde!
 
Code:
package Rechner;

import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class Gui2 extends JFrame
{
	private JFrame frame;
	private JPanel panel;
	private JButton button, button1;
	private JTextField field,field2;

	public Gui2() 
	{
		initGui();
	}

	public void initGui() 
	{
		// Create and set up the window.
		frame = new JFrame("Rechner");
		frame.setSize(500, 400);
		frame.setLocation(200,200);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	    
		panel=new JPanel(new GridLayout(2,2));
		
		final JTextField field=new JTextField ("0");
		final JTextField field2=new JTextField ("0");
		button = new JButton("C° zu °F");
		button1 = new JButton("°F zu C°");
		
		field.setFont(new Font("Times New Roman", Font.BOLD, 14)); 
		field.setBackground(new Color(255,255,255));
		field.setToolTipText("Celsius");
		
		field2.setFont(new Font("Times New Roman", Font.BOLD, 14)); 
		field2.setBackground(new Color(255,255,255));
		field2.setToolTipText("Fahrenheit");
		
		button.setFont(new Font("Times New Roman", Font.ITALIC, 20));
		button.setBackground(new Color(230,150,20));
		button.setToolTipText("Grad Celsius zu Fahrenheit");
		
		button1.setFont(new Font("Times New Roman", Font.ITALIC, 20));
		button1.setBackground(new Color(0,150,0));
		button1.setToolTipText("Fahrenheit zu Grad Celsius");
		
		getContentPane().add(panel);
		panel.add(field);
		panel.add(field2);
		panel.add(button);
		panel.add(button1);
		frame.add(panel);
		frame.pack();
		panel.setVisible(true);
		
		button.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent arg0) 
			{
				czuF();
			}
			
		});
		
		button1.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent arg0) 
			{
				fzuC();
			}
			
		});
		
	}
	public void fzuC()
	{
		String a="";
		double c;
		c=((Double.parseDouble(field2.getText())-32)*5)/9;
		a=a+c;
		field.setText(a);
	}
	public void czuF()
	{
		
	}
	
}
mein ganzer code hoffe es hilft
 
Schau mal her:

Du hast folgendes global:
private JTextField field,field2;

und im Code legst du folgendes an:
final JTextField field=new JTextField ("0");
final JTextField field2=new JTextField ("0");


Na fällt dir etwas auf? du initialisierst doppelt aber die Globalen Textfelder sind nicht angelegt! In deiner Formel versuchst auf ein TextFeld zuzugreifen was gar nicht vorhanden ist.

So wird es gemacht:
Code:
    field=new JTextField ("0");
    field2=new JTextField ("0");
 
Zurück