-4

わかりました、元の投稿を編集したので、誰もタイトルについて再び議論することはありません (それは私のせいですので、今は怒らないでください) ... TextField のテキストを受け取るコードの一部があります (実際には 2 つの TextField がありますが、ユーザーは一度に 1 つしか使用できません)、端末に保存されているファイルを検索します。問題は、TextFields の 1 つにテキストがある場合でも、常に null 文字列を取得することです...これはコードです:

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();
}

}

解決策が簡単であることはわかっていますが、取得できません...

4

1 に答える 1

6

その唯一の値はstr常に与えることが保証されてtrueいるline.contains(str)のは空Stringです。


String.containsメソッドはその仕様に従って機能すると想定する必要があります。JavaSEの中心となるメソッドで以前に検出されなかったバグ、特に提案しているほど壮観なバグの可能性はごくわずかです。確かに、確固たる証拠なしに壊れた場合、すべての人の時間、特にあなたの時間を無駄にするだけです。)

于 2012-05-02T13:08:33.093 に答える