您好我有一个打开JFrame并接收文本的类。但是当我尝试获取文本时,它说它为空。 每次我单击按钮,我希望System.out打印我在textArea中输入的文本。
这是我的第一堂课:
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());
}
}
}
这是一个接收输入并将其存储在静态String中的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.
答案 0 :(得分:3)
您对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();
}
答案 1 :(得分:1)
您的主要不会等到用户在textArea中指定了文本。您可以通过循环来阻止此行为,直到设置textArea中的文本,或者您可以将main函数的逻辑放入ActionListener来处理事件。 在第二种方式之后,main函数只创建一个新的FileBrowser对象。