日期:2014-05-20  浏览次数:20864 次

文本域按行读取的问题
[code=Java][/code]

package cn.com.lintl39227;
import java.util.Timer;
import java.util.TimerTask;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Scanner;

import javax.swing.*;

public class MusicPlayer
{

/**
* @param args
*/
public static void main(String[ ] args)
{
JFrame.setDefaultLookAndFeelDecorated(true);

JFrame frame = new MusicFrame();
frame.setSize(800, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setOpacity(0.75f);
//frame.getContentPane().setBackground(Color.LIGHT_GRAY); //这样可以设置面板的背景色
frame.setVisible(true);
}

}

class MusicFrame extends JFrame
{
private JFileChooser chooser;
private JTextArea textArea;
private JMenuBar menuBar;

public Runnable r;
public Thread t;

public MusicFrame()
{
chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("."));

textArea = new JTextArea("");
textArea.setLineWrap(true); //自动换行功能
textArea.setWrapStyleWord(true); //断行不断字功能
textArea.setFont(new Font("方正行楷_GBK", Font.PLAIN, 13));
textArea.setEditable(false);
add(textArea, BorderLayout.CENTER);

r = new display(chooser, textArea);
t = new Thread(r);

menuBar = new JMenuBar();
setJMenuBar(menuBar);

JMenu fileMenu = new JMenu("File");
menuBar.add(fileMenu);

JMenuItem open = new JMenuItem("Open");
fileMenu.add(open);
open.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
work();
}
});
}

protected void work()
{
t.start();
}
}

class display implements Runnable
{
private JFileChooser chooser;
private JTextArea textArea;

public display(JFileChooser chooser, JTextArea textArea)
{
this.chooser = chooser;
this.textArea = textArea;
}

public void run()
{
int result = chooser.showOpenDialog(null); //打开一个选择对话框

if(result == JFileChooser.APPROVE_OPTION)
{
textArea.setText("");
try
{
File file = chooser.getSelectedFile();
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

String line = null;
line = in.readLine();
while(line != null)
{
textArea.append(line);
textArea.append("\n");
Thread.sleep(1000);

line = in.readLine();
}
in.close();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
catch (IOException e1)
{
e1.printStackTrace();
}
}
}
}

[code=Java][/code]
在第二次打开文档的时候就出错 请问该怎么解决呢?
谢谢

------解决方案--------------------
代码不是把文件内容显示在文本域吗? 没有读文本域啊?
------解决方案--------------------
我感觉是你那个work函数的毛病,因为你第一次点open的时候就调用了这个方法,t线程就运行了,你又点open,就是将运行中的线程又执行了一次start
------解决方案--------------------
Java code

protected void work() {
        if(t.isAlive()){
            t.stop();
        }
        r = new display(chooser, textArea);
        t = new Thread(r);
        t.start();
    }