Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么每次我的输出都是空的?_Java_Swing - Fatal编程技术网

Java 为什么每次我的输出都是空的?

Java 为什么每次我的输出都是空的?,java,swing,Java,Swing,您好,我有一个类,它打开一个JFrame并接收一个文本。但是当我尝试获取文本时,它会说它为空。 每次单击按钮时,我都希望System.out打印我在文本区域中输入的文本 这是我的第一节课: public class FileReader { FileBrowser x = new FileBrowser(); private String filePath = x.filePath; public String getFilePath(){ retu

您好,我有一个类,它打开一个JFrame并接收一个文本。但是当我尝试获取文本时,它会说它为空。 每次单击按钮时,我都希望System.out打印我在文本区域中输入的文本

这是我的第一节课:

public class FileReader {

    FileBrowser x = new FileBrowser();
    private String filePath = x.filePath;

    public String getFilePath(){

        return this.filePath;
    }

    public static void main(String[] args) {
        FileReader x = new FileReader();
        if(x.getFilePath() == null){
            System.out.println("String is null.");
        }
        else
        {
            System.out.println(x.getFilePath());
        }
    }
}
这是一个接收输入并将其存储在静态字符串中的JFrame

/*
 * This class is used to read the location 
 * of the file that the user.
 */
import java.awt.*;
import java.awt.event.*;
import java.awt.event.*;
import javax.swing.*;


public class FileBrowser extends JFrame{

    private JTextArea textArea;
    private JButton button;
    public static String filePath;

    public FileBrowser(){
        super("Enter file path to add");
        setLayout(new BorderLayout());

        this.textArea = new JTextArea();
        this.button = new JButton("Add file");

        add(this.textArea, BorderLayout.CENTER);
        add(this.button, BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(300, 100);
        setVisible(true);

        this.button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                filePath = new String(textArea.getText());
                System.exit(0);
            }
        });

    }
}
但每次我运行这些程序我都会

String is null.

JFrames的工作方式是错误的。JFrame在关闭之前不会暂停代码的执行。因此,基本上,您的代码创建一个JFrame,然后在用户可能指定文件之前,获取该对象中的
filePath
变量

因此,要解决这个问题,将输出文件路径到stdout的代码移动到您拥有的
ActionListener
。摆脱
System.exit()
调用,改用
dispose()


更新:ActionListener应该有以下代码:

this.button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        filePath = new String(textArea.getText());

        if(filePath == null){
            System.out.println("String is null.");
        }
        else
        {
            System.out.println(filePath);
        }

        dispose();
    }
});
作为主要方法:

public static void main(String[] args)
{
    FileBrowser x = new FileBrowser();
}

JFrames的工作方式是错误的。JFrame在关闭之前不会暂停代码的执行。因此,基本上,您的代码创建一个JFrame,然后在用户可能指定文件之前,获取该对象中的
filePath
变量

因此,要解决这个问题,将输出文件路径到stdout的代码移动到您拥有的
ActionListener
。摆脱
System.exit()
调用,改用
dispose()


更新:ActionListener应该有以下代码:

this.button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        filePath = new String(textArea.getText());

        if(filePath == null){
            System.out.println("String is null.");
        }
        else
        {
            System.out.println(filePath);
        }

        dispose();
    }
});
作为主要方法:

public static void main(String[] args)
{
    FileBrowser x = new FileBrowser();
}

main不会等到用户在textArea中指定了一个文本。您可以通过循环来防止这种行为,直到设置textArea中的文本,或者将主函数的逻辑放入ActionListener来处理事件。
按照第二种方法,main函数只创建一个新的FileBrowser对象。

main不会等到用户在textArea中指定了一个文本。您可以通过循环来防止这种行为,直到设置textArea中的文本,或者将主函数的逻辑放入ActionListener来处理事件。

按照第二种方法,main函数只创建一个新的FileBrowser对象。

您希望它是什么,为什么?我希望它是“Test”或我在textArea中键入的任何内容。我想使用输入的文本。这是我的问题:/为什么不打印测试?:/为什么你希望它打印测试?为什么?你告诉我们你想做什么,为什么你想做,但你没有解释你所做的是如何实现的。你希望它是什么,为什么?我希望它是“测试”或我在文本区键入的任何内容。我想使用输入的文本。这是我的问题:/为什么不打印测试?:/为什么你希望它打印测试?为什么?你告诉我们你想做什么,为什么要做,但你没有解释你是如何做到这一点的。我将我的主要内容添加到ActionListener中。但是我仍然得到空的输出。另外,如何使用
dispose()
?非常感谢。我还有一个简短的问题。如何在其他类中使用在文本区域中输入的文本/使用构造函数创建一个类,该构造函数接受字符串并将该字符串存储到自己的成员变量中。然后对该对象调用一个方法,例如。因此,基本上,我在这里的
ActionListener
中进行大部分编码?是的,您可以从action listener启动它。您希望在用户指定文件后开始执行操作,因此,是的,在action listener中,大多数事情都应该进行。我将我的main添加到ActionListener中。但是我仍然得到空的输出。另外,如何使用
dispose()
?非常感谢。我还有一个简短的问题。如何在其他类中使用在文本区域中输入的文本/使用构造函数创建一个类,该构造函数接受字符串并将该字符串存储到自己的成员变量中。然后对该对象调用一个方法,例如。因此,基本上,我在这里的
ActionListener
中进行大部分编码?是的,您可以从action listener启动它。您希望在用户指定文件后开始执行操作,因此,是的,在action listener中,大多数操作都应该执行。