Fehlermeldung und Fenster wird nicht mehr angezeigt

  • Themenstarter Themenstarter Ente_
  • Beginndatum Beginndatum
E

Ente_

Gast
Hallo zusammen,
so wie hier schon beschrieben hab ich ein etwas größeres Problem http://www.java-forum.org/java-basics-anfaenger-themen/145508-fehlermeldung.html#post971627

Ich habe hier jetzt mal den kompletten Programmtext vllt findet jemand ja was falsch ist....

Es geht dabei um einen Temperaturumrechner.
Der Benutzer mit einer Chechbox angeben welche Temperatur er haben möchte (höchstens 2)
Seine ursprüngliche Temperatur muss er dafür eingeben in das Kästchen.
Dann muss er durch Drücken des Schalter die Berechnung straten...
Leider klappt irgendwie nichts davon so richtig 🙁
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;





/**
  *
  * Temperaturumrechner
  *
  * @version 1.0 vom 18.12.2012
  * @ 
  */

public class Temperaturumrechner extends JFrame {
  // Anfang Attribute
  
  private CheckboxGroup checkboxgroupRadio;
  
  //Ueberschrift
   private JLabel lb_Ueberschrift = new JLabel();
  
  //Grafik
  private JLabel lb_Bild = new JLabel();
  private ImageIcon lb_BildIcon = new ImageIcon("images/thermometer-clip-art-7.gif");
   
  
  private JLabel lb_Celsius = new JLabel();
  private JNumberField zf_Celsius = new JNumberField();
  private JNumberField zf_Kelvin = new JNumberField();
  private JNumberField zf_Fahrenheit = new JNumberField();
  private JLabel lb_Fahrenheit = new JLabel();
  private JLabel lb_Kelvin = new JLabel();
  
  
    
  
  private JCheckBox cb_Celsius = new JCheckBox();
  private JCheckBox cb_Fahrenheit = new JCheckBox();
  private JCheckBox cb_Kelvin = new JCheckBox();
 
  private JButton sf_Berechnen = new JButton();
  // Ende Attribute
  
  public Temperaturumrechner(String title) { 
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 617; 
    int frameHeight = 606;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setResizable(false);
    Container cp = getContentPane();
    
    // Anfang Komponenten
      
    lb_Ueberschrift.setBounds(110, 16, 340, 57);
    lb_Ueberschrift.setText("Temperaturumechner");
    lb_Ueberschrift.setForeground(Color.RED);
    lb_Ueberschrift.setHorizontalAlignment(SwingConstants.CENTER);
    lb_Ueberschrift.setFont(new Font("Arial", Font.BOLD, 28));
    cp.add(lb_Ueberschrift);
    lb_Bild.setBounds(360, 384, 203, 185);
    lb_Bild.setText("");
    lb_Bild.setIcon(lb_BildIcon);
    cp.add(lb_Bild);
    lb_Celsius.setBounds(16, 232, 115, 41);
    lb_Celsius.setText("Celsius in °C:");
    lb_Celsius.setFont(new Font("Arial", Font.BOLD, 14));
    cp.add(lb_Celsius);
    zf_Celsius.setBounds(160, 232, 169, 41);
    zf_Celsius.setText("");
    cp.add(zf_Celsius);
    zf_Kelvin.setBounds(160, 360, 169, 41);
    zf_Kelvin.setText("");
    cp.add(zf_Kelvin);
    zf_Fahrenheit.setBounds(160, 304, 169, 41);
    zf_Fahrenheit.setText("");
    cp.add(zf_Fahrenheit);
    lb_Fahrenheit.setBounds(16, 296, 131, 41);
    lb_Fahrenheit.setText("Fahrenheit in °F:");
    lb_Fahrenheit.setFont(new Font("Arial", Font.BOLD, 14));
    cp.add(lb_Fahrenheit);
    lb_Kelvin.setBounds(16, 360, 131, 41);
    lb_Kelvin.setText("Kelvin in °K:");
    lb_Kelvin.setFont(new Font("Arial", Font.BOLD, 14));
    cp.add(lb_Kelvin);
    cb_Celsius.setBounds(16, 112, 145, 41);
    cb_Celsius.setText("Celsius");
    cb_Celsius.setOpaque(false);
    cb_Celsius.setFont(new Font("Arial", Font.BOLD, 14));
    cp.add(cb_Celsius);
    cb_Fahrenheit.setBounds(200, 104, 153, 49);
    cb_Fahrenheit.setText("Fahrenheit");
    cb_Fahrenheit.setOpaque(false);
    cb_Fahrenheit.setFont(new Font("Arial", Font.BOLD, 14));
    cp.add(cb_Fahrenheit);
    cb_Kelvin.setBounds(400, 104, 169, 49);
    cb_Kelvin.setText("Kelvin");
    cb_Kelvin.setOpaque(false);
    cb_Kelvin.setFont(new Font("Arial", Font.BOLD, 14));
    cp.add(cb_Kelvin);
    sf_Berechnen.setBounds(152, 176, 241, 41);
    sf_Berechnen.setText("berechnen!");
    sf_Berechnen.setMargin(new Insets(2, 2, 2, 2));
    sf_Berechnen.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        sf_Berechnen_ActionPerformed(evt);
      }
    });
    sf_Berechnen.setFont(new Font("Arial", Font.BOLD, 14));
    cp.add(sf_Berechnen);
    // Ende Komponenten
    
    setVisible(true);
  } // end of public Temperaturumrechner
  
  // Anfang Methoden
  
  
  public void sf_Berechnen_ActionPerformed(ActionEvent evt) {
    // Benutzereingaben erfassen
    double celsius= zf_Celsius.getDouble();
    double fahrenheit= zf_Fahrenheit.getDouble();
    double kelvin= zf_Kelvin.getDouble();
    
    //Temperatur berechnen
    
    
    if ( cb_Celsius.isSelected()) {
      celsius = (kelvin-273.15);
      celsius= ((fahrenheit-32)/ 1.8);
    } // end of if
    
    if (cb_Fahrenheit.isSelected()) {
      fahrenheit = ((celsius*1.8)+32);
    } // end of if
    
    if (cb_Kelvin.isSelected()) {
      kelvin = (celsius+273.15 );
    } // end of if
    
    //Temperatur anzeigen
    zf_Celsius.setDouble(celsius,2);
    zf_Fahrenheit.setDouble(fahrenheit,2);
    zf_Kelvin.setDouble(kelvin,2);
    
  } // end of sf_Berechnen_ActionPerformed
  
  // Ende Methoden
  
  public static void main(String[] args) {
    new Temperaturumrechner("Temperaturumrechner");
  } // end of main
  
} // end of class Temperaturumrechner



Evtl. wäre es auch praktischer das in Echtzeit umzurechnen... Allerdings weiß ich da nicht welche Methode ich verwenden muss...
Vielen Dank für die Hilfe im vorraus 🙂
 
Zuletzt bearbeitet von einem Moderator:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:992)
	at java.lang.Double.valueOf(Double.java:475)
	at java.lang.Double.<init>(Double.java:567)
	at JNumberField.getDouble(JNumberField.java:19)
	at Temperaturumrechner.sf_Berechnen_ActionPerformed(Temperaturumrechner.java:135)
	at Temperaturumrechner$1.actionPerformed(Temperaturumrechner.java:120)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6288)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6053)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4651)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
	at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:992)
	at java.lang.Double.valueOf(Double.java:475)
	at java.lang.Double.<init>(Double.java:567)
	at JNumberField.getDouble(JNumberField.java:19)
	at Temperaturumrechner.sf_Berechnen_ActionPerformed(Temperaturumrechner.java:135)
	at Temperaturumrechner$1.actionPerformed(Temperaturumrechner.java:120)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6288)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6053)
	at java.awt.Container.processEvent(Container.java:2041)
	at java.awt.Component.dispatchEventImpl(Component.java:4651)
	at java.awt.Container.dispatchEventImpl(Container.java:2099)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
	at java.awt.Container.dispatchEventImpl(Container.java:2085)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4481)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
	at java.awt.EventQueue.access$000(EventQueue.java:84)
	at java.awt.EventQueue$1.run(EventQueue.java:602)
	at java.awt.EventQueue$1.run(EventQueue.java:600)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:616)
	at java.awt.EventQueue$2.run(EventQueue.java:614)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
 
Wieso der neue Thread? Das in dem Code manches keinen Sinn macht und woher der Fehler kommt wurde ja schon im anderen Thread erwähnt.

Ein paar Hinweise: Mit
Code:
setLocationRelativeTo(null)
wird der JFrame in der Mitte des Bildschirms platziert.
Man sollte möglichst LayoutManager verwenden. Bei Null Layout und absoluter Positionierung stößt man in der Regel früher oder später auf Probleme.
Fange vielleicht ersteinmal nur mit zwei Temperaturskalen z.B. Celsius und Fahrenheit an und versuche das zum Laufen zu bringen.

[JAVA=134]public void sf_Berechnen_ActionPerformed(ActionEvent evt) {
// Benutzereingaben erfassen
double celsius= zf_Celsius.getDouble();
double fahrenheit= zf_Fahrenheit.getDouble();
double kelvin= zf_Kelvin.getDouble();[/code]
Vielleicht kam es im anderen Thread nicht deutlich raus, aber das da oben funktioniert nur fehlerfrei, wenn in allen drei Textfeldern auch was drin steht.
 
Vielleicht kam es im anderen Thread nicht deutlich raus, aber das da oben funktioniert nur fehlerfrei, wenn in allen drei Textfeldern auch was drin steht.


Okay :/ und wie muss ich das dann ändern, dass es geht wenn auch nur in einem was drinsteht und die anderen daraus berechnet werden sollen??

weiß vllt jemand warum dass Fenster nur noch leer ist ? Und nur noch berechnen zu sehen ist?
 
Du solltest dich mal ausführlicher mit LayoutManagern beschäftigen. Der JFrame hat als Standard das BorderLayout, da nützten dir deine setBounds() überhaupt nix. Und wenn du beim BorderLayout etwas hinzufügst, dann landet das (ohne weitere Angaben) im CENTER-Bereich. Jeder Bereich im BorderLayout kann aber nur 1 Komponente aufnehmen. Also landet dort nur die zuletzt hinzugefügte Komponente drin.
 
Du solltest dich mal ausführlicher mit LayoutManagern beschäftigen. Der JFrame hat als Standard das BorderLayout, da nützten dir deine setBounds() überhaupt nix. Und wenn du beim BorderLayout etwas hinzufügst, dann landet das (ohne weitere Angaben) im CENTER-Bereich. Jeder Bereich im BorderLayout kann aber nur 1 Komponente aufnehmen. Also landet dort nur die zuletzt hinzugefügte Komponente drin.


ohje ohje also den text hat das Programm von allein geschrieben ich hab mir das Fenster nur so zusammengeklickt...
 
weiß vllt jemand warum dass Fenster nur noch leer ist ? Und nur noch berechnen zu sehen ist?
Dann ist es doch nicht leer ;-) JFrame benutzt default ein BorderLayout und Du fügst alle Komponenten in den CENTER Bereich ein, somit ist nur die zuletzt eingefügte Komponente zu sehen.
Okay :/ und wie muss ich das dann ändern, dass es geht wenn auch nur in einem was drinsteht und die anderen daraus berechnet werden sollen??
Du musst überprüfen, ob überhaupt etwas drin steht und erst dann kannst Du den Double Wert auslesen.
[JAVA=143] if ( cb_Celsius.isSelected()) {
celsius = (kelvin-273.15);
celsius= ((fahrenheit-32)/ 1.8);
} // end of if[/code]
Dass Zeile 145 die Zeile 144 absurd macht, wurde im anderen Thread ja bereits erwähnt.

Allgemein hast Du noch ein ganz gravierenden Fehler im Konzept. Wenn die Umrechnung in Kelvin gewünscht ist, welchen Wert zur Berechnung nimmst Du? Den in Celsius oder den in Fahrenheit?

Besser wäre es, es gäbe nur ein Eingabefeld in das der Anwender einen Wert einträgt und dann eine JComboBox oder meinetwegen JRadioButtons mit denen er angibt, aus welcher Temperaturskala der Wert kommt. Für die Ausgabe gibt es dann z.B. drei JLabels in denen die entsprechende Temperatur in allen drei Skalen ausgegeben wird.
 
Dann ist es doch nicht leer ;-) JFrame benutzt default ein BorderLayout und Du fügst alle Komponenten in den CENTER Bereich ein, somit ist nur die zuletzt eingefügte Komponente zu sehen.

Du musst überprüfen, ob überhaupt etwas drin steht und erst dann kannst Du den Double Wert auslesen.

Dass Zeile 145 die Zeile 144 absurd macht, wurde im anderen Thread ja bereits erwähnt.

Allgemein hast Du noch ein ganz gravierenden Fehler im Konzept. Wenn die Umrechnung in Kelvin gewünscht ist, welchen Wert zur Berechnung nimmst Du? Den in Celsius oder den in Fahrenheit?

Besser wäre es, es gäbe nur ein Eingabefeld in das der Anwender einen Wert einträgt und dann eine JComboBox oder meinetwegen JRadioButtons mit denen er angibt, aus welcher Temperaturskala der Wert kommt. Für die Ausgabe gibt es dann z.B. drei JLabels in denen die entsprechende Temperatur in allen drei Skalen ausgegeben wird.


Das klingt logisch 😀 ich werds nochmal überarbeiten... wie kann ich das denn ändern dass die Komponenten nicht im Centerbereich sind?
 
ich habs jetzt nochmal neu gemacht ... alles...

Jetzt geht alles also mir ist jetzt auch klar wies gehen muss außer eine Fehlermeldung ...

Code:
Temperaturrechner.java:166:29: cannot find symbol
symbol  : variable fahrenheit
location: class Temperaturrechner
    zf_Fahrenheit.setDouble(fahrenheit,2);
                            ^
Temperaturrechner.java:167:25: cannot find symbol
symbol  : variable kelvin
location: class Temperaturrechner
    zf_Kelvin.setDouble(kelvin,2);
                        ^
Temperaturrechner.java:168:26: cannot find symbol
symbol  : variable celsius
location: class Temperaturrechner
    zf_Celsius.setDouble(celsius,2);
                         ^
3 errors
Java:
public void sf_Berechnen_ActionPerformed(ActionEvent evt) {
    //Benutzerangaben erfassen
    
    double ausgangstemperatur= zf_Ausgangstemperatur.getDouble();
    
    //Temperatur umrechnen
    if (cb_Celsius.isSelected()); {
      double fahrenheit= ((ausgangstemperatur*1.8)+32);
      double kelvin= (ausgangstemperatur +273.15 );
    } // end of if
    
    if (cb_Kelvin.isSelected()) {
      double celsius= (ausgangstemperatur -273.15);
      double fahrenheit= ((ausgangstemperatur * 1.8) − 459.67);
    } // end of if
    
    if (cb_Fahrenheit.isSelected()) {
      double celsius=  ((ausgangstemperatur-32)/ 1.8);
      double kelvin= ((ausgangstemperatur + 459.67)/1.8); 
    } // end of if
    
    
    //Temperatur anzeigen
    zf_Fahrenheit.setDouble(fahrenheit,2);
    zf_Kelvin.setDouble(kelvin,2);
    zf_Celsius.setDouble(celsius,2);
    
    
    
    
  } // end of sf_Berechnen_ActionPerformed
 
Die Variablen sind ja nur in den jeweiligen if Blöcken deklariert und daher auch nur dort gültig. ==> Einfach die jeweiligen Textfelder auch in den if Blöcken setzen.

Ändert aber nichts am grundsätzlichen konzeptionellen Fehler.
 
die Variablen sind nicht ausserhalb der Klammer sichtbar..
eins weiter aussen deklarieren
oder Textfelder in den ifs befuellen

Mist Michael war schneller 🙂
 

Zurück
Oben