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