为什么文本显示不完全?

zhangzhongke007 2009-10-24 09:50:19
上代码:

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”。而且,命令提示符窗口中还有一大堆异常提示……为啥?
...全文
134 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangzhongke007 2009-10-24
  • 打赏
  • 举报
回复
谢谢各位
lz12366007 2009-10-24
  • 打赏
  • 举报
回复
顶。。。
HelloAldis 2009-10-24
  • 打赏
  • 举报
回复
equals 的规则 是传入null 他就会一定返回是false
因为equals规则大概为
关于equals方法重写与hashcode方法重写有讲究的:

equals方法必须具有的性质:

1.自反性

2.对称性

3.传递性

4,一致性,对象没有被修改的请况下多次调用的结果一样

5,对非null引用a,对null进行检查一定返回 false
rookie001 2009-10-24
  • 打赏
  • 举报
回复
我刚才说法有点问题
read.readLine().equals(null) 应该是当你read.readLine()
是个null时,你再调用它的equals必然是,空指针异常
rookie001 2009-10-24
  • 打赏
  • 举报
回复
呵呵,equals不是这样用的,照理
read.readLine().equals(null) 是永远返回false的
你这里是个死循环,出啦异常才会跳出

而且你readline两次,会隔行跳过的(不给line赋值)

按楼上的写吧
amdgaming 2009-10-24
  • 打赏
  • 举报
回复

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

closewbq 2009-10-24
  • 打赏
  • 举报
回复

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

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧