JavaFX Sehr viele Exceptions bei Taschenrechner mit JavaFx

Achtung, sehr großer Beitrag:
Hallo Community,

ich habe mich an einem Taschenrechner in Kombination mit JavaFx versucht. Das UI habe ich mit dem Scenebuilder erstellt, und im Nachhinein den Rest mit Eclipse programmiert. Nun bekomme ich jede Menge Exceptions, und ich sitze schon einige Zeit daran den/die Fehler zu finden. Da ich jedoch noch ein Anfänger bin, kann es gut sein dass ich etwas wichtiges übersehen habe, aber darum ist dieses Forum doch da ;-).
Hier der Code von der Main-Klasse:
Code:
package application;
 
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;



public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            Parent root = FXMLLoader.load(getClass().getResource("UI.fxml"));
            Scene scene = new Scene(root);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
        launch(args);
    }
}

Hier von der Model-Klasse:
Code:
package application;

public class Model {

    public double calculate(double base, double input, String operation) {
        double zwischenergebnis=0;
        switch(operation) {
        case "+": zwischenergebnis = base + input;break;
        case "-": zwischenergebnis = base - input;break;
        case "/": zwischenergebnis = base / input;break;
        case "*": zwischenergebnis = base * input;break;
    
        }
        return zwischenergebnis;
    
    }
    public double secondCalculate(Double zwischenergebnis,double input, String operation) {
    
        switch(operation) {
        case "+": zwischenergebnis = zwischenergebnis + input;break;
        case "-": zwischenergebnis = zwischenergebnis - input;break;
        case "/": zwischenergebnis = zwischenergebnis / input;break;
        case "*": zwischenergebnis = zwischenergebnis * input;break;
    
        }
        return zwischenergebnis;
    }
 
}

Hier von der Controller-Klasse:
Code:
package application;

import javafx.scene.control.*;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.text.Text;

public class Controller {

 
 
    @FXML
    public static Text result;
 
    public static Double c_base;
    public static Double c_input;
 
    public static double base;
    public static double input;
    public static Double zwischenergebnis;
    public static String operation = "";
    public static String value;
 
    Model model = new Model();
 
    public void baseNumberTapped(ActionEvent event) {
        //Cases vor erster berechnung
        if(c_base==null && zwischenergebnis==null) {
            value = ((Button)(event.getSource())).getText();
            c_base = Double.parseDouble(value);
            result.setText(value);
        }
    
        else if(c_base != null&&zwischenergebnis==null){
            value = ((Button)(event.getSource())).getText();
            c_input = Double.parseDouble(value);
            result.setText(value);
        }
    
        else if(c_input != null&&zwischenergebnis==null) {
            base=c_base;
            input=c_input;
            zwischenergebnis = model.calculate(base, input, operation);
            c_base=null;
            c_input=null;
        }
        //Cases nach erster Berechnung
        else if(zwischenergebnis != null) {
            value = ((Button)(event.getSource())).getText();
            input = Double.parseDouble(value);
            zwischenergebnis = model.secondCalculate(zwischenergebnis, input, operation);
        }
    
    
    }
 
 
    public void operatorTapped(ActionEvent event) {
        operation = ((Button)(event.getSource())).getText();
    
    }
    public void equalsTapped(ActionEvent event) {
    
        result.setText(String.valueOf(zwischenergebnis));
    }
    public void clearTapped(ActionEvent event) {

         result=null;
    
        c_base=null;
        c_input=null;
    
    
        zwischenergebnis=null;
        operation = "";
        value=null;
    }
}
Und hier noch von der UI:
Code:
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.text.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>

<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="400.0" spacing="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.Controller">
   <children>
      <StackPane prefHeight="80.0" prefWidth="400.0">
         <children>
            <Text fx:id="result" strokeType="OUTSIDE" strokeWidth="0.0" text="0" textAlignment="RIGHT" wrappingWidth="393.5625">
               <font>
                  <Font size="40.0" />
               </font>
            </Text>
         </children>
      </StackPane>
      <HBox alignment="TOP_CENTER" prefHeight="50.0" prefWidth="300.0" spacing="20.0">
         <children>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="7">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="8">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="9">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#operatorTapped" prefHeight="50.0" prefWidth="80.0" text="+">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
         </children>
      </HBox>
      <HBox alignment="TOP_CENTER" prefHeight="50.0" prefWidth="300.0" spacing="20.0">
         <children>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="4">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="5">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="6">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#operatorTapped" prefHeight="50.0" prefWidth="80.0" text="-">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
         </children>
      </HBox>
      <HBox alignment="TOP_CENTER" prefHeight="50.0" prefWidth="300.0" spacing="20.0">
         <children>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="1">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="2">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="3">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#operatorTapped" prefHeight="50.0" prefWidth="80.0" text="*">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
         </children>
      </HBox>
      <HBox alignment="TOP_CENTER" prefHeight="50.0" prefWidth="300.0" spacing="20.0">
         <children>
            <Button mnemonicParsing="false" onAction="#clearTapped" prefHeight="50.0" prefWidth="80.0" text="C">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#baseNumberTapped" prefHeight="50.0" prefWidth="80.0" text="0">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#equalsTapped" prefHeight="50.0" prefWidth="80.0" text="=">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
            <Button mnemonicParsing="false" onAction="#operatorTapped" prefHeight="50.0" prefWidth="80.0" text="/">
               <font>
                  <Font size="30.0" />
               </font>
            </Button>
         </children>
      </HBox>
   </children>
</VBox>

Die Logik hinter dem Taschenrechner habe ich mit einem Konsolen Programm getestet:
Code:
import javax.swing.JOptionPane;

public class Main {
    public static int zwischenergebnis;

    public static void main (String[]args) {
        while(true) {
            String s = javax.swing.JOptionPane.showInputDialog("Input");
            int eingabe = Integer.parseInt(s);
            String operation  = JOptionPane.showInputDialog("Operation");
            String d = JOptionPane.showInputDialog("Nächster Input");
            int k = Integer.parseInt(d);
            switch(operation) {
            case "+": zwischenergebnis = eingabe + k;break;
            case "-": zwischenergebnis = eingabe - k;break;
            case "/": zwischenergebnis = eingabe / k;break;
            case "*": zwischenergebnis = eingabe * k;break;
        
            }
        
            int j =JOptionPane.showConfirmDialog(null, "Weiter?");
            if(j==0) {
                while(true) {
                    operation  = JOptionPane.showInputDialog("Operation");
                    d = JOptionPane.showInputDialog("Nächster Input");
                    k = Integer.parseInt(d);
                    switch(operation) {
                    case "+": zwischenergebnis = zwischenergebnis + k;break;
                    case "-": zwischenergebnis = zwischenergebnis - k;break;
                    case "/": zwischenergebnis = zwischenergebnis / k;break;
                    case "*": zwischenergebnis = zwischenergebnis * k;break;
                    }
                
                     j =JOptionPane.showConfirmDialog(null, "Weiter?");
                    if(j==1) {
                        break;
                    }
                
                }
                break;
            }
            else if(j==1) {
                break;
            }
        
        }
        System.out.println(zwischenergebnis);
    }
}

Falls jemand was mit den Exceptions anfangen kann:
https://pastebin.com/kaDdtNzw
So, das wärs, hoffentlich kann mir jemand helfen.

Und schon im voraus einen RIESEN Dank an denjenigen, der sich allein die Mühe gemacht hat, sich das alles hier durchzulesen.
PS: Ich weiß dass einige sehr wichtige Dinge wie zum Beispiel die Division durch 0 noch berücksichtigt werden müssen, mir ging es am Anfang jedoch nur darum dass ich einfach Dinge wie 75248+7464-84662 ausrechnen kann.
Mfg Itssimsch
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
R JTable für sehr viele Daten sehr langsam AWT, Swing, JavaFX & SWT 20
Ernesto95 JavaFX JavaFX GUI mit sehr vielen Update requests AWT, Swing, JavaFX & SWT 4
P JTextField wird nur sehr klein angezeigt und verändert die Größe nicht AWT, Swing, JavaFX & SWT 3
E Java-TexturePaint sehr langsam AWT, Swing, JavaFX & SWT 9
S Swing Schrift sehr klein Ubuntu/eclipse AWT, Swing, JavaFX & SWT 18
Tommy135 JFileChooser ist sehr langsam AWT, Swing, JavaFX & SWT 13
MadMax2506 Swing JTable lädt sehr lange AWT, Swing, JavaFX & SWT 1
RalleYTN Modaler Dialog und JTree Node mit sehr... seeeeehr vielen Elementen AWT, Swing, JavaFX & SWT 6
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
J JavaFX Rendering von Canvas sehr langsam AWT, Swing, JavaFX & SWT 2
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
L [Slick2d] Sidescroller/Hintergrundbild sehr langsam AWT, Swing, JavaFX & SWT 3
E JavaFX Sehr viel und unterschiedlich Großen Inhalt auf einer "Fläche" ... Umsetzbar ? AWT, Swing, JavaFX & SWT 3
M JTable mit wechselnden Spalten - sehr Langsam AWT, Swing, JavaFX & SWT 5
E 3D-Grafik JOGL (lädt sehr lange) AWT, Swing, JavaFX & SWT 20
P sehr doll äußerst immens dringlich.... JFrame füllt sich nicht!!! AWT, Swing, JavaFX & SWT 5
R Image laden sehr langsam AWT, Swing, JavaFX & SWT 7
J Sehr schnell Text anzeigen? AWT, Swing, JavaFX & SWT 15
S Swing Swing macht sehr seltsame Zeichnungen. AWT, Swing, JavaFX & SWT 13
B JTree - sehr individuell AWT, Swing, JavaFX & SWT 3
K Swing Spiel flackert sehr häufig AWT, Swing, JavaFX & SWT 2
J 2D-Grafik JPanel reagiert sehr träge AWT, Swing, JavaFX & SWT 3
V Swing remove(Component) blockiert Thread sehr lange. AWT, Swing, JavaFX & SWT 6
K Graphics.drawImage() sehr schnell AWT, Swing, JavaFX & SWT 5
A Swing JTextPane sehr langsam AWT, Swing, JavaFX & SWT 6
T JList / ListSelectionListener / sehr eigenartig AWT, Swing, JavaFX & SWT 11
R JPanel sehr große JPanel hinzufügen AWT, Swing, JavaFX & SWT 5
N Swing sehr großes Bild skalieren AWT, Swing, JavaFX & SWT 8
R Ich suche einen sehr simplen. AWT, Swing, JavaFX & SWT 2
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
S Bilder werden sehr langsam geladen AWT, Swing, JavaFX & SWT 4
W gridbaglayout streckt sich zu sehr. AWT, Swing, JavaFX & SWT 17
doctus img.getScaledInstance() sehr rechenintensiv und langsam? AWT, Swing, JavaFX & SWT 3
ARadauer spalten überschriften von jtable sehr klein AWT, Swing, JavaFX & SWT 2
C JButton + JFrame Reaktion SEHR langsam. AWT, Swing, JavaFX & SWT 2
S GridLayout mit sehr großen Abständen AWT, Swing, JavaFX & SWT 3
E sehr simpel AWT, Swing, JavaFX & SWT 6
B viele JPanels auf JLayeredPane -> to SVG? AWT, Swing, JavaFX & SWT 15
H Viele ActionListener (MouseListener) - Performance AWT, Swing, JavaFX & SWT 24
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
M If für viele TextFields AWT, Swing, JavaFX & SWT 7
kaoZ Swing JMenuBar, Preferences, Properties... und viele andere lustige Dinge (Best Practice) AWT, Swing, JavaFX & SWT 15
K Viele Textfield mit Hilfe eines MousListener leeren - möglich? AWT, Swing, JavaFX & SWT 8
M Swing Erste Schritte mit der GUI, viele Probleme AWT, Swing, JavaFX & SWT 36
propra 2D-Grafik Beliebig viele Objekte auf einer Zeichenfläche zeichnen AWT, Swing, JavaFX & SWT 15
L unbestimmt viele JComboBox und ItemListener dazu erstellen AWT, Swing, JavaFX & SWT 2
P 2D-Grafik Viele Bilder zu einem Video AWT, Swing, JavaFX & SWT 3
Dit_ Wenn viele NebenFenster zum Locationsetzen das HauptFenster brauchen AWT, Swing, JavaFX & SWT 2
P SWT Composite und viele Labels AWT, Swing, JavaFX & SWT 10
D Zu viele repaints() AWT, Swing, JavaFX & SWT 17
G Viele Fehler beim zeichen AWT, Swing, JavaFX & SWT 5
Z zu viele prozesse AWT, Swing, JavaFX & SWT 2
G zu viele/große BufferedImage führt zu Java heap space AWT, Swing, JavaFX & SWT 5
D Wie viele Pixel welches Icon? AWT, Swing, JavaFX & SWT 4
TheJavaKid Lösung für zu Viele JMenuItems. AWT, Swing, JavaFX & SWT 4
T viele Canvas auf einem Panel und das GUI schmiert ab AWT, Swing, JavaFX & SWT 6
Starchild Beliebig viele Knöpfe AWT, Swing, JavaFX & SWT 5
H Exceptions seit java: 1.6.0_65 Umstellung AWT, Swing, JavaFX & SWT 3
H JTable: Diverse NullPointer-Exceptions zur Laufzeit AWT, Swing, JavaFX & SWT 3
F JavaFX wirft zufällig Exceptions AWT, Swing, JavaFX & SWT 5
F JavaFX Custom Exceptions AWT, Swing, JavaFX & SWT 5
apple_pie1998 Programm gibt plötzlich exceptions aus. AWT, Swing, JavaFX & SWT 4
F L&F Exceptions AWT, Swing, JavaFX & SWT 10
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
D ALLE exceptions in Log fenster anzeigen AWT, Swing, JavaFX & SWT 17
B Exceptions werfen und in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
B Exceptions in actionPerformed() weiterleiten AWT, Swing, JavaFX & SWT 9

Ähnliche Java Themen

Neue Themen


Oben