StackOverflowError-我找不到递归

时间:2018-08-29 21:27:52

标签: java javafx

我目前正在使用JavaFX开发程序。为了在我的控制器(从GUI元素获取输入)和另一个类之间进行通信,我创建了我的控制器类(“ Input”)的实例,以允许我使用我的getter方法。每次运行代码时,都会收到以下错误:`导致原因:

java.lang.StackOverflowError
    at application.Input.<init>(Input.java:157)
    at application.Input.<init>(Input.java:157)
    at application.Input.<init>(Input.java:157)
    at application.Input.<init>(Input.java:157)
    at application.Input.<init>(Input.java:157)

`(以此类推,适用于许多行)。

从在线研究中,我意识到这意味着我正在发生某种递归,但是我不知道它在哪里。它声称这来自的行只是一个空的构造函数。这是我的代码:

   package application;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import jm.JMC;
import jm.music.data.*;
import jm.util.*;

public class Input implements Initializable{

    //Main Screen
    //Buttons
    public void generateButtonClicked(){
        System.out.println("Generate button click recieved.");
    }
    public void saveButtonClicked(){
        System.out.println("Save button click recieved.");
    }
    public void randomButtonClicked(){
        System.out.println("Random setting button click recieved.");
        int rand = (int)(Math.random() * 5 + 1);
        scaleDrop.getSelectionModel().select(rand);
        String scaleDropValue1 = (String) scaleDrop.getValue();
        if (scaleDropValue1.equals("Minor Pentatonic")){
            rand = (int)(Math.random() * 4) + 1;
        }
        else if (scaleDropValue1.equals("Natural Minor")){
            rand = (int)(Math.random() * 6) + 1;
        }
        else if (scaleDropValue1.equals("Major")){
            rand = (int)(Math.random() * 7) + 1;
        }
        else if (scaleDropValue1.equals("Dorian")){
            rand = (int)(Math.random() * 7) + 1;
        }
        else if (scaleDropValue1.equals("Mixolydian")){
            rand = (int)(Math.random() * 7) + 1;
        }
        rootDrop.getSelectionModel().select(rand);
        rand = (int)(Math.random() * 4) + 1;
        styleDrop.getSelectionModel().select(rand);
        rand = (int)(Math.random() * 10) + 1;
        complexitySlider.setValue(rand);
        rand = (int)(Math.random() * 267) + 33;
        BPMSlider.setValue(rand);
    }
    public void playButtonClicked(){
        System.out.println("Play button click recieved.");
    }

    @FXML private ComboBox scaleDrop;
    @FXML private ComboBox rootDrop;
    @FXML private ComboBox styleDrop;
    @FXML private Slider complexitySlider;
    @FXML private Slider BPMSlider;
    @FXML private Label complexityLabel;
    @FXML private Label BPMLabel;
    //Dropdowns
    public void initialize (URL url, ResourceBundle rb){
        scaleDrop.setValue("Musical Scale");
        scaleDrop.getItems().add("Musical Scale");
        scaleDrop.getItems().add("Minor Pentatonic");
        scaleDrop.getItems().add("Natural Minor");
        scaleDrop.getItems().add("Major");
        scaleDrop.getItems().add("Dorian");
        scaleDrop.getItems().add("Mixolydian");

        rootDrop.setValue("Root Note");
        rootDrop.getItems().add("Root Note");
        rootDrop.getItems().add("E");
        rootDrop.getItems().add("F");
        rootDrop.getItems().add("Gb");
        rootDrop.getItems().add("G");
        rootDrop.getItems().add("Ab");
        rootDrop.getItems().add("A");
        rootDrop.getItems().add("Bb");
        rootDrop.getItems().add("B");
        rootDrop.getItems().add("C");
        rootDrop.getItems().add("Db");
        rootDrop.getItems().add("D");
        rootDrop.getItems().add("Eb");

        styleDrop.setValue("Style");
        styleDrop.getItems().add("Style");
        styleDrop.getItems().add("Tight");
        styleDrop.getItems().add("Wide");
        styleDrop.getItems().add("Sustained");
        styleDrop.getItems().add("Random");

    }

    public void scaleDropClicked(){
        String scaleDropValue = (String) scaleDrop.getValue();
        rootDrop.getItems().clear();
        if (scaleDropValue.equals("Minor Pentatonic")){
            rootDrop.setValue("Root Note");
            rootDrop.getItems().add("Root Note");
            rootDrop.getItems().add("F");
            rootDrop.getItems().add("Bb");
            rootDrop.getItems().add("C");
            rootDrop.getItems().add("Eb");
        }
        else if (scaleDropValue.equals("Natural Minor")){
            rootDrop.setValue("Root Note");
            rootDrop.getItems().add("Root Note");
            rootDrop.getItems().add("F");
            rootDrop.getItems().add("G");
            rootDrop.getItems().add("Ab");
            rootDrop.getItems().add("C");
            rootDrop.getItems().add("D");
            rootDrop.getItems().add("Eb");
        }
        else if (scaleDropValue.equals("Major")){
            rootDrop.setValue("Root Note");
            rootDrop.getItems().add("Root Note");
            rootDrop.getItems().add("A");
            rootDrop.getItems().add("B");
            rootDrop.getItems().add("C");
            rootDrop.getItems().add("D");
            rootDrop.getItems().add("E");
            rootDrop.getItems().add("F");
            rootDrop.getItems().add("G");
        }
        else if (scaleDropValue.equals("Dorian")){
            rootDrop.setValue("Root Note");
            rootDrop.getItems().add("Root Note");
            rootDrop.getItems().add("F");
            rootDrop.getItems().add("G");
            rootDrop.getItems().add("A");
            rootDrop.getItems().add("Bb");
            rootDrop.getItems().add("C");
            rootDrop.getItems().add("D");
            rootDrop.getItems().add("Eb");
        }
        else if (scaleDropValue.equals("Mixolydian")){
            rootDrop.setValue("Root Note");
            rootDrop.getItems().add("Root Note");
            rootDrop.getItems().add("E");
            rootDrop.getItems().add("F");
            rootDrop.getItems().add("G");
            rootDrop.getItems().add("A");
            rootDrop.getItems().add("Bb");
            rootDrop.getItems().add("C");
            rootDrop.getItems().add("D");
        }
        else{
            rootDrop.setValue("Root Note");
            rootDrop.getItems().add("Root Note");
        }
    }

    public Input allSettings = new Input();

    public String getScaleString() {
        String scaleString = (String) scaleDrop.getValue();
        return scaleString;
    }
    public String getRootString() {
        String rootString = (String) rootDrop.getValue();
        return rootString;
    }
    public String getStyleString() {
        String styleString = (String) styleDrop.getValue();
        return styleString;
    }
    public int getComplexityInt() {
        int complexityInt = Integer.parseInt(complexityLabel.getText());
        return complexityInt;
    }
    public int getBPMInt() {
        int BPMInt = Integer.parseInt(BPMLabel.getText());
        return BPMInt;
    }}

您可能会说,我是一名初学者程序员,但对我而言,没有什么可以引起这种递归的。我可能会错过一些非常明显的东西,但找不到它-太令人沮丧了!

如果有人能告诉我这个错误的来源,那就太好了。

谢谢!

0 个答案:

没有答案