Javafx kalkulator, brak kompilacji mimo tego że intellij stwierdza że działa.

0

Tak więc dla samorozwoju postanowiłem sobie napisać kalkulator z GUI z pomocą pewnego tutoriala na Youtubie.
Generalnie rzecz wygląda następująco. Napisałem wczoraj kalkulator, odpaliłem. Działał.. Postanowiłem go zjarować. Czego jednak nie dokończyłem. Dziś zasiadłem do komputera i postanowiłem go odpalić. Wczorajszy plik nie chciał sie uruchomić więc wpadłem na pomysł ze utworzę nowy projekt i brutalnie przekopiuje zawartość ze starego.
Przekopiowałem. Generalnie kod wygląda tak :
Main:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            Parent root = FXMLLoader.load(getClass().getResource("/sample/sample.fxml"));
            Scene scene = new Scene(root, 400, 400);
            primaryStage.setScene(scene);
            primaryStage.setTitle("Calculator");
            primaryStage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

}

Controller:


public class Controller {
    @FXML
    private Label result;
    private long number1 = 0;
    private String operator = "";
    private boolean start = true;
    private Model model = new Model();

    @FXML
    public void processNumbers(ActionEvent event) {
        if (start) {
            result.setText("");
            start = false;
        }
        String value = ((Button) event.getSource()).getText();
        result.setText(result.getText() + value);

    }

    @FXML
    public void processOperators(ActionEvent event) {
        String value = ((Button) event.getSource()).getText();
        if (!value.equals("=")) {
            if (!operator.isEmpty()) ;
            operator = value;
            number1 = Long.parseLong(result.getText());
            result.setText("");

        } else {
            if (operator.isEmpty());
            long number2 = Long.parseLong(result.getText());
            float output = model.calculate(number2, number1, operator);
            result.setText(String.valueOf(output));
            operator = "";
            start = true;


        }
    }
}

Model:

public class Model {
    public float calculate (long number1, long number2, String operator){
    switch(operator){
        case "+":
            return number1+ number2;
        case "-":
            return number1- number2;
        case "*":
            return number1* number2;
        case "/":
            if (number2==0)
                return 0;
            return number1/ number2;

        default: return 0;

    }

}

}

sample.fxml:

<VBox fx:id="Controller" fillWidth="false" maxHeight="329.0" maxWidth="300.0" minHeight="300.0" minWidth="300.0"
      prefHeight="316.0" prefWidth="300.0" style="-fx-background-color: gray;" xmlns="http://javafx.com/javafx/8.0.171"
      xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
    <children>
        <StackPane prefHeight="100.0" prefWidth="300.0">
            <children>
                <Label fx:id="result" prefHeight="56.0" prefWidth="230.0" style="-fx-background-color: white;">
                    <font>
                        <Font name="System Bold" size="18.0" />
                    </font>
                    <StackPane.margin>
                        <Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
                    </StackPane.margin>
                    <padding>
                        <Insets bottom="1.0" left="1.0" right="1.0" top="1.0" />
                    </padding>
                </Label>
            </children></StackPane>
        <HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
            <children>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="7">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="8">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="9">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="/">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
            </children>
        </HBox>
        <HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
            <children>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="4">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="5">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="6">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="*">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
            </children>
        </HBox>
        <HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
            <children>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="1">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="2">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="50.0" text="3">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="-">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
            </children>
        </HBox>
        <HBox alignment="CENTER" prefHeight="50.0" prefWidth="300.0" spacing="10.0">
            <children>
                <Button mnemonicParsing="false" onAction="#processNumbers" prefWidth="110.0" text="0">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="=">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
                <Button mnemonicParsing="false" onAction="#processOperators" prefWidth="50.0" text="+">
                    <font>
                        <Font size="18.0" />
                    </font>
                </Button>
            </children>
        </HBox>
    </children>
</VBox>

Dodam że przy kompilacji wyskakuje mi Could not find or load main class sample.Main.
Wydaje mi się jednak że ze ścieżkami wszystko jest w porządku

0

Jeśli odpalasz go command line'a i klasa znajduje się w pliku jar to musisz go podać używając przełącznika -cp

0

@_zbyszek: Odpalałem go z Intellij, commandline'a nawet nie tykałem

0

Spróbuj z menu Build wywołać opcję "Rebuild Project" aby przebudować projekt. Może to pomoże.

0

Nie pomogło. Chyba napiszę od nowa.

0

A odpal poprzez zieloną strzałkę obok Main (w pliku przy numerkach linijek)

0
danek napisał(a):

A odpal poprzez zieloną strzałkę obok Main (w pliku przy numerkach linijek)

Nie ma takiej opcji nawet niestety

1

Podejrzewam, że masz kilka projektów na liście i jak uruchamiasz to (nie) ładuje się ten Main z tego projektu co trzeba.

Warto zajrzeć do "Edit Configurations"

Bez tytułu.png

1 użytkowników online, w tym zalogowanych: 0, gości: 1