上代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.BorderLayout;
import java.awt.FileDialog;
import java.awt.TextArea;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Button;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.io.File;public class FileDialogTest extends Frame implements ActionListener
{
private Menu menu = new Menu("File");
private MenuBar menuBar = new MenuBar();
private MenuItem item_1 = new MenuItem("Open");
private MenuItem item_2 = new MenuItem("Close");
private MenuItem item_3 = new MenuItem("Exit");
private TextArea textArea = new TextArea(); public FileDialogTest(){
super("FileDialog");
menu.add(item_1);
menu.add(item_2);
menu.addSeparator();
menu.add(item_3); menuBar.add(menu); item_1.addActionListener(this);
item_2.addActionListener(this);
item_3.addActionListener(this); setLayout(new BorderLayout());
//add(menuBar,BorderLayout.NORTH);MenuBar不能用这种方法添加。
setMenuBar(menuBar);
add(textArea,BorderLayout.CENTER);
textArea.setEditable(false); setSize(400,600);
pack();
setVisible(true);
} public void actionPerformed(ActionEvent e){
if(e.getSource().equals(item_3)){
System.exit(0);
}
else if(e.getSource().equals(item_1)){
FileDialog dialog = new FileDialog(this,"Open File",FileDialog.LOAD);
dialog.setVisible(true);
if(!dialog.getFile().equals(null)){
File file = new File(dialog.getDirectory()+dialog.getFile());
if(file.exists()){
reader(file.toString());
}
else
        textArea.setText("the filename:"+dialog.getFile()+"is invalid");
}
dialog.dispose();
}
} public void reader(String file){
textArea.setText(" ");
try{
BufferedReader read = new BufferedReader(new FileReader(file));
String line ;
while(!read.readLine().equals(null)){
line = read.readLine();
textArea.append(line+'\n');
}
read.close();
textArea.setCaretPosition(0);
}catch(FileNotFoundException e){
System.err.println("Error:"+e);
}catch(IOException ef){
System.err.println("Error:"+ef);
}
} public static void main(String [] args){
FileDialogTest fileDialog = new FileDialogTest();
}
}请教,为啥显示出来的文本不完全那?还有,在显示出来的文本最后总有一个“null”。而且,命令提示符窗口中还有一大堆异常提示……为啥?

解决方案 »

  1.   


    while((line=read.readLine())!=null){
                        textArea.append(line+'\n');
                        }
      

  2.   


    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.BorderLayout;
    import java.awt.FileDialog;
    import java.awt.TextArea;
    import java.awt.Frame;
    import java.awt.Menu;
    import java.awt.MenuBar;
    import java.awt.MenuItem;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.FileNotFoundException;
    import java.io.File;public class FileDialogTest extends Frame implements ActionListener {
    private Menu menu = new Menu("File"); private MenuBar menuBar = new MenuBar(); private MenuItem item_1 = new MenuItem("Open"); private MenuItem item_2 = new MenuItem("Close"); private MenuItem item_3 = new MenuItem("Exit"); private TextArea textArea = new TextArea(); public FileDialogTest() {
    super("FileDialog");
    menu.add(item_1);
    menu.add(item_2);
    menu.addSeparator();
    menu.add(item_3); menuBar.add(menu); item_1.addActionListener(this);
    item_2.addActionListener(this);
    item_3.addActionListener(this); setLayout(new BorderLayout());
    // add(menuBar,BorderLayout.NORTH);//MenuBar不能用这种方法添加。
    //api没有办法 当然就没有这种办法了。这个没什么好问 的
    setMenuBar(menuBar);
    add(textArea, BorderLayout.CENTER);
    textArea.setEditable(false); setSize(400, 600);
    pack();
    setVisible(true);
    } public void actionPerformed(ActionEvent e) {
    if (e.getSource().equals(item_3)) {
    System.exit(0);
    } else if (e.getSource().equals(item_1)) {
    FileDialog dialog = new FileDialog(this, "Open File",
    FileDialog.LOAD);
    dialog.setVisible(true);
    if (!(dialog.getFile() == null)) {
    File file = new File(dialog.getDirectory() + dialog.getFile());
    if (file.exists()) {
    reader(file.toString());
    } else
    textArea.setText("the filename:" + dialog.getFile()
    + "is invalid");
    }
    dialog.dispose();
    }
    } public void reader(String file) {
    textArea.setText(" ");
    try {
    BufferedReader read = new BufferedReader(new FileReader(file));
    String line;
    while ((line = read.readLine()) != null) { textArea.append(line + "\n");
    }
    read.close();
    textArea.setCaretPosition(0);
    } catch (FileNotFoundException e) {
    System.err.println("Error:" + e);
    } catch (IOException ef) {
    System.err.println("Error:" + ef);
    }
    } public static void main(String[] args) {
    FileDialogTest fileDialog = new FileDialogTest();
    }
    }
      

  3.   

    呵呵,equals不是这样用的,照理
    read.readLine().equals(null)  是永远返回false的
    你这里是个死循环,出啦异常才会跳出而且你readline两次,会隔行跳过的(不给line赋值)按楼上的写吧
      

  4.   

    我刚才说法有点问题
    read.readLine().equals(null)  应该是当你read.readLine()
    是个null时,你再调用它的equals必然是,空指针异常
      

  5.   

    equals 的规则 是传入null 他就会一定返回是false
    因为equals规则大概为
    关于equals方法重写与hashcode方法重写有讲究的:equals方法必须具有的性质:1.自反性2.对称性3.传递性4,一致性,对象没有被修改的请况下多次调用的结果一样5,对非null引用a,对null进行检查一定返回 false