线程" main"中的例外情况java.lang.NoSuchMethodException:在我添加ArrayList之后

时间:2015-02-10 04:43:27

标签: java arraylist javafx nosuchelementexception

我正在编写将数字从TextField移动到TextArea以进行排序或混洗或反转的程序。所有输入的数字都必须保存在ArrayList中。

首先,我创建带有按钮标签等的javafx舞台。然后我添加了按钮的监听器以及将文本从TextField移动到TextArea。在分配给ArrayList中的存储数字之前,我成功运行了我的程序几次。然后我收到了异常消息

Exception in Application constructor
Exception in thread "main" java.lang.NoSuchMethodException: StoreNumbers.main([Ljava.lang.String;)
    at java.lang.Class.getMethod(Class.java:1778)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:119)

我在网上和stackoverflow上搜索但是找不到能帮助我理解我做错的东西。在我的代码下面。如有任何建议,请提前感谢您的帮助。

 import javafx.application.Application;
 import javafx.geometry.Pos;
 import javafx.scene.Scene;
 import javafx.scene.control.*;
 import javafx.scene.input.KeyCode;
 import javafx.scene.layout.BorderPane;
 import javafx.scene.layout.FlowPane;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.Pane;
 import javafx.stage.Stage;
 import java.util.*;

 public class StoreNumbers extends Application {
    private TextField textField = new TextField();
    private TextArea textArea = new TextArea();
    StoreNumberPane snPane = new StoreNumberPane();
    List<String> arrayList = new ArrayList<>();
    public void start(Stage primaryStage) {

    Button btSort = new Button("Sort");
    Button btShuffle = new Button("Shuffle");
    Button btReverse = new Button("Reverse");
    HBox hBox = new HBox(10);
    hBox.getChildren().addAll(btSort, btShuffle, btReverse);
    hBox.setAlignment(Pos.CENTER);

    btSort.setOnAction(e -> snPane.sort());
    btShuffle.setOnAction(e -> snPane.shuffle());
    btReverse.setOnAction(e -> snPane.reverse());

    Label label = new Label("Enter a number: ");

    textField.setPromptText("Enter integer");
    FlowPane flowPane = new FlowPane();

    flowPane.getChildren().addAll(label, textField);

    ScrollPane scrollPane = new ScrollPane(textArea);

    BorderPane pane = new BorderPane();
    pane.setCenter(textArea);
    pane.setBottom(hBox);
    pane.setTop(flowPane);

    pane.setOnKeyPressed(e -> {
        if (e.getCode() == KeyCode.ENTER) {
            obtainData();
            textField.clear();
        }
    });

    Scene scene = new Scene(pane, 400, 400);
    primaryStage.setTitle("Exercise20_20");
    primaryStage.setScene(scene);
    primaryStage.show();

    snPane.requestFocus();
}

    public void displayArray(){

    }

    private void obtainData(){

        String userInput = textField.getText();
        if(userInput != null)

        arrayList.add(userInput);

        textArea.setText(String.format("%s", arrayList));
    }



}

class StoreNumberPane extends Pane{

StoreNumbers storeNumbers = new StoreNumbers();




public void sort(){
    Collections.sort(storeNumbers.arrayList);

}

public void shuffle(){
    Collections.shuffle(storeNumbers.arrayList);
}

public void reverse(){
    Collections.reverse(storeNumbers.arrayList);
}
}

2 个答案:

答案 0 :(得分:0)

您的应用程序的问题是您尝试再次从StoreNumberPane创建应用程序类的新实例,甚至在旧实例完成实例化之前。

整个应用程序中应该只有一个应用程序类实例。所以创建一个新实例不会有帮助。 JavaFX won't throw an error for it, but it is not the instance you are looking for

现在,你只需要StoreNumberPane中的一个arraylist,你有很多选择来获得它。

  • ArrayList设为静态,现在可以从任何地方轻松访问
  • 创建一个方法,该方法返回类的当前实例并使用它来访问列表
  • 最后和最好的方法是传递你想要排序,改组或反向的lsit

你的电话会变成,

btSort.setOnAction(e -> snPane.sort(arrayList));

您的方法声明变为,

public void sort(List list) {
    Collections.sort(list);
}

Though I am still not sure, why are you using the {StoreNumberPane {1}} {窗格{1}}

对字符串进行排序的完整示例:

which extends

答案 1 :(得分:-1)

您从课程申请中延伸。通过这样做,您始终需要声明主函数。

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

看看这个简单的oracle示例...... helloworld