gpt4 book ai didi

java - JTextField.getText() 返回 null 值,即使它里面有内容

转载 作者:行者123 更新时间:2023-11-30 04:48:16 25 4
gpt4 key购买 nike

我有一部分代码,它获取 TextField 的文本(实际上有两个 TextField,但用户一次只能使用一个)并将其搜索到存储在终端中的文件中。问题是我总是得到一个空字符串,即使其中一个文本字段中有文本......这是代码(分配在方法 actionPerformed() 上:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Search implements ActionListener{
JFrame frame;
JButton click;
JLabel comando, carico;
JTextField textv, text;
JTextArea res;
String pathFile = "C:\\Log.txt";
String str= new String();

Search(){

frame = new JFrame("Search");
frame.setSize(400, 200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new GridLayout(1,2));
frame.setResizable(false);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(7,1));
click = new JButton("Cerca");
comando = new JLabel("Comando");
carico = new JLabel("A carico di:");
textv = new JTextField("");
text = new JTextField("");
res = new JTextArea("");
panel.add(comando);
panel.add(textv);
panel.add(carico);
panel.add(text);
panel.add(click);
res.setLineWrap(true);
res.setWrapStyleWord(true);
res.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));

JScrollPane scroller = new JScrollPane(res);
scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
panel.add(scroller);
frame.add(panel);
click.addActionListener(this);
click.setSize(70, 35);
frame.setVisible(true);

}

public void actionPerformed (ActionEvent e){
if(e.getSource()==click){
res.setText(null);
if(textv != null) {cercaStringa(pathFile, textv.getText().toString());}
else {cercaStringa(pathFile, text.getText().toString());}
}
}

public void cercaStringa(String pathFile, String stringa){
try {
BufferedReader in = new BufferedReader(new FileReader(pathFile));
String line = new String();
while((line = in.readLine())!=null) {
if(line.contains(stringa)){
res.append(line);
res.append("\n");
}
}
}
catch(IOException ex) { ex.printStackTrace();}
}



public static void main (String[] args){
new Search();
}

}

我真的要把所有东西都扔到窗外,因为我知道解决方案很简单,但我无法得到它......

最佳答案

正如以下测试所证实的那样,在调用 actionListener 时,您的字段不为 null。例如,输入 "Comando""Carico" 输出 "Test: Comando" 后跟 "Test: Carico",如预期:

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == click) {
res.setText(null);
System.out.println("Test: "+textv.getText());
System.out.println("Test: "+text.getText());
if (textv != null) {
cercaStringa(pathFile, textv.getText().toString());
} else {
cercaStringa(pathFile, text.getText().toString());
}
}
}
<小时/>

问题是 if (textv != null) 在第一次运行时永远不会到达“else”(据我在快速查看我给出的代码中可以看出,它永远不会在 any 上运行,因为 textv 永远不会设置 null),因为 textv = new JTextField (""); 不等于 textv = null,并且 textv 仍将持有一个字符串,尽管它是一个空字符串。

解决办法是这样的:

public void actionPerformed(ActionEvent e) {
if (e.getSource() == click) {
res.setText("");
if (!textv.getText().isEmpty()) {
cercaStringa(pathFile, textv.getText().toString());
} else {
cercaStringa(pathFile, text.getText().toString());
}
}
}
<小时/>

您还缺少对 C:\Log.txt 是否存在的验证,因此很容易触发异常。

这是主要的快速修复:

public static void main(String[] args) {
File log = new File("C:\\Log.txt");
if (!log.exists()) {
try {
/*
* mkdirs() is not really needed when using the C root,
* but I like to do this because the path might be changed.
*/
if (!log.getParentFile().exists()) {
log.getParentFile().mkdirs();
}
log.createNewFile();
} catch (IOException ex) {
Logger.getLogger(Search.class.getName()).log(Level.SEVERE, null, ex);
}
}
Search search = new Search();
}

关于java - JTextField.getText() 返回 null 值,即使它里面有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com