1

我写了这段代码:

public class FileViewer extends JPanel implements ActionListener {

/**
 * 
 */
private static final long serialVersionUID = 1L;

JFileChooser chooser;

FileNameExtensionFilter filter = null;

JEditorPane pane = null;

JTextField text = null;

JButton button;

JTextArea o = null;

URL url;

public FileViewer(JTextArea o) {
    this.o = o;
    setLayout(new FlowLayout(FlowLayout.RIGHT));
    JTextField text = new JTextField("file...", 31);
    text.setColumns(45);
    text.revalidate();
    text.setEditable(true);

    button = new JButton("Browse");
    add(text);
    add(button);
    filter = new FileNameExtensionFilter("html", "html");
    chooser = new JFileChooser();
    chooser.addChoosableFileFilter(filter);

    button.addActionListener(this);

}

public void paintComponent(Graphics g) {
    super.paintComponents(g);
    Graphics2D graphic = (Graphics2D) g;
    graphic.drawString("HTML File:", 10, 20);

}

public void actionPerformed(ActionEvent event) {
    int returnVal = 0;
    if (event.getSource() == button) {
        returnVal = chooser.showOpenDialog(FileViewer.this);
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            text.setToolTipText(chooser.getSelectedFile().getName());

        } else
            o.append("Open command cancled by user.");
      }
     }
}

但是在这条线上:text.setToolTipText(chooser.getSelectedFile().getName());抛出了 NullPointerException !

编辑 我已经解决了我上面提到的问题,但它不能正常工作(它没有在文本中写入文件名!):-(

4

5 回答 5

13

您已text全局声明并分配NULL给它。在您的构造函数中FileViewer再次声明它new,但此声明是本地的。中引用的变量actionPerformed()是全局变量,它仍然是NULL,所以你得到了异常。如果你改变

JTextField text = new JTextField("file...", 31);

text = new JTextField("file...", 31);

那应该解决它。

于 2009-08-06T14:25:39.287 回答
4

回答你的另一点:

text.setToolTipText(chooser.getSelectedFile().getName());

这是预期的行为吗?当您将鼠标悬停在文本字段上时,文件名只会显示为工具提示。要将文本直接放入 JTextField 您应该调用setText()

于 2009-08-06T14:37:42.827 回答
2

替换这个:

JTextField text = new JTextField("file...", 31);

有了这个:

text = new JTextField("file...", 31);
于 2009-08-06T14:26:08.570 回答
2

字段文本为空,因为在 FileViewer 构造函数中,您创建了一个名为 text 的局部变量,该变量已添加到表单中。

代替

JTextField text = new JTextField("file...", 31);

text = new JTextField("file...", 31);
于 2009-08-06T14:26:44.637 回答
1

setToolTipText方法不设置文本。它设置工具提示文本,当鼠标悬停文本时显示。使用setText方法。

于 2009-08-06T14:40:23.040 回答