我正在编写将数字从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);
}
}
答案 0 :(得分:0)
您的应用程序的问题是您尝试再次从StoreNumberPane
创建应用程序类的新实例,甚至在旧实例完成实例化之前。
整个应用程序中应该只有一个应用程序类实例。所以创建一个新实例不会有帮助。 JavaFX won't throw an error for it, but it is not the instance you are looking for
现在,你只需要StoreNumberPane
中的一个arraylist,你有很多选择来获得它。
ArrayList
设为静态,现在可以从任何地方轻松访问你的电话会变成,
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