How to transfer string between methods (Java)

别等时光非礼了梦想. 提交于 2019-12-24 21:21:10

问题


Essentially, I'm trying to collect data for a string and use it in another method. Whatever I've tried hasn't seemed to work. Please check out my code and tell me what to do.

  • I've tried to declare the string as a public string, but since it is in a method I can't.
  • My goal is to transfer the string "application_1" to button3's setOnAction method.
@Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("myDesktop");
        window.setOnCloseRequest(e -> closeProgram());

        button = new Button("Setup MyDesktop");
        button3 = new Button("Start Test Application");

        button2 = new Button("Choose Wheel Applications");
        button2.setOnAction(e -> {
            JFileChooser jfc = new JFileChooser();
            jfc.showDialog(null, "Please select a file.");
            jfc.setVisible(true);
            File filename = jfc.getSelectedFile();
            String application_1 = filename.getName();
            if (application_1.endsWith(".exe")) {
                System.out.println("File successfully chosen!");

            } else {
                System.out.println("File is not an application!");
                System.out.println("Please choose another file!");
                System.out.println("Issue Alert Box here...");
            }
            if (application_1 == null) {
                System.out.println("No file selected!");
    }
        });

        button.setOnAction(e -> {
            AlertBox.display("Alert", "Save file?");
        });
        button3.setOnAction(e -> {
            Runtime runtime = Runtime.getRuntime();
            try {
                Process process = runtime.exec("name_of_file");
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        });

I want the string to be able to be used by the code

button3.setOnAction(e -> {
// code
});

回答1:


Should work:

@Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        window.setTitle("myDesktop");
        window.setOnCloseRequest(e -> closeProgram());
        String application_1 = ""; 

        button = new Button("Setup MyDesktop");
        button3 = new Button("Start Test Application");

        button2 = new Button("Choose Wheel Applications");
        button2.setOnAction(e -> {
            JFileChooser jfc = new JFileChooser();
            jfc.showDialog(null, "Please select a file.");
            jfc.setVisible(true);
            File filename = jfc.getSelectedFile();
            application_1 = filename.getName();
            if (application_1.endsWith(".exe")) {
                System.out.println("File successfully chosen!");

            } else {
                System.out.println("File is not an application!");
                System.out.println("Please choose another file!");
                System.out.println("Issue Alert Box here...");
            }
            if (application_1 == null) {
                System.out.println("No file selected!");
    }
        });

        button.setOnAction(e -> {
            AlertBox.display("Alert", "Save file?");
        });
        button3.setOnAction(e -> {
            Runtime runtime = Runtime.getRuntime();
            System.out.println(application_1); //here you can use the variable

            try {

                Process process = runtime.exec("name_of_file");
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        });



回答2:


Since you don't have control over the actual event that's created when the button is hit you cannot pass it directly (well, maybe you could add a tag to the button or something similar - I never used javafx).

But nothing prevents you from introducing an object-level variable to hold your string(s).

class YourClass {
    private String myString = "";

    public void start(Stage primaryStage) throws Exception {
        // ...
        button2.setOnAction(e -> {
            this.myString = "application_1";
        });
        // ...
        button3.setOnAction(e -> {
            System.out.println(this.myString);
        });
    }

}

Alternatively, if your variable is final or effectively final you can just use it in your anonymous function:

class YourClass {

    public void start(Stage primaryStage) throws Exception {
        // ...
        final String myString = "application_1";
        // ...
        button3.setOnAction(e -> {
            System.out.println(myString);
        });
    }

}


来源:https://stackoverflow.com/questions/57235984/how-to-transfer-string-between-methods-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!