我目前正在使用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;
}}
您可能会说,我是一名初学者程序员,但对我而言,没有什么可以引起这种递归的。我可能会错过一些非常明显的东西,但找不到它-太令人沮丧了!
如果有人能告诉我这个错误的来源,那就太好了。
谢谢!