进度条出来了,但是不显示进度,以下是完整代码:package ui;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.ProgressMonitorInputStream;
import javax.swing.SwingConstants;public class DataImporter extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; JPanel p = new JPanel(); JButton btn = new JButton("选择文件"); JLabel status = new JLabel("", SwingConstants.CENTER); public DataImporter() {
super("数据导入器");
setBounds(350, 250, 300, 150);
setMinimumSize(new Dimension(300, 150));
setAlwaysOnTop(true); Container c = getContentPane(); btn.setToolTipText("请选择要导入的数据文件");
btn.setPreferredSize(new Dimension(100, 30));
btn.setFocusPainted(false); p.add(btn); status.setForeground(Color.RED);
status.setPreferredSize(new Dimension(300, 35)); btn.addActionListener(this); c.add(p, BorderLayout.NORTH);
c.add(status, BorderLayout.CENTER); } public void actionPerformed(ActionEvent e) {
if (e.getSource() == btn) {
JFileChooser chooser = new JFileChooser();
int option = chooser.showOpenDialog(DataImporter.this);
if (option == JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
readFile(file);
status.setText("数据导入成功");
DataImporter.this.repaint();
}
}
} public void readFile(final File file) { Thread thread = new Thread() {
public void run() {
FileInputStream fis = null;
ProgressMonitorInputStream pmis = null;
InputStreamReader isr = null;
BufferedReader br = null;
try {
fis = new FileInputStream(file);
pmis = new ProgressMonitorInputStream(DataImporter.this,"正在处理", fis);
isr = new InputStreamReader(pmis);
br = new BufferedReader(isr);
String line = br.readLine();
while ((line = br.readLine()) != null) {
System.out.println(line);
}
fis.close();
pmis.close();
isr.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
thread.run();
} public static void main(String[] args) {
DataImporter importer = new DataImporter();
importer.setVisible(true);
}}

解决方案 »

  1.   

    进度条要用到JProgressBar,你没这个控件么
      

  2.   

    如果你能用JProgressBar显示文件读取的进度也行,麻烦你把代码贴出来给我看看。
      

  3.   

    改了一个方法,你试下,我这里可以了    public void readFile(final File file) {        new Thread() {
                public void run() {
                    FileInputStream fis = null;
                    ProgressMonitorInputStream pmis = null;
                    InputStreamReader isr = null;
                    BufferedReader br = null;
                    try {
                        fis = new FileInputStream(file);
                        pmis = new ProgressMonitorInputStream(DataImporter.this,"正在处理", fis);              
                        //isr = new InputStreamReader(pmis);
    //
    //                    br = new BufferedReader(isr);
    //                    String line = br.readLine();
    //                    while ((line = br.readLine()) != null) {
    //                        System.out.println(line);
    //                    }                    int c; 
                        while((c=pmis.read()) != -1) { 
                            //这里处理你的代码
                        }
                        fis.close();
                        pmis.close();
    //                    isr.close();
    //                    br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }
      

  4.   

    那只能解析换行符来判断了,因为ProgressMonitorInputStream的read方法override了inputstream的read方法,如果再套一层估计得自己再写个类来实现了
      

  5.   

    读取行也可以了,我是下面的代码
    ps:文件要够大,小于2秒不显示public void readFile(final File file) {        new Thread() {
                public void run() {
                    InputStream fis = null;
                    ProgressMonitorInputStream pmis = null;
                    InputStreamReader isr = null;
                    BufferedReader br = null;
                    try {
                        fis = new FileInputStream(file);
                        pmis = new ProgressMonitorInputStream(DataImporter.this,"正在处理", fis);                   
                        isr = new InputStreamReader(pmis);            
                        br = new BufferedReader(isr);
                        String line = br.readLine();
                        while ((line = br.readLine()) != null) {
                            System.out.println(line);
                        }
                       
                        fis.close();
                        pmis.close();
                        isr.close();
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }.start();
        }
      

  6.   

    冒汗了,我知道你出错原因了。你启动线程用了.run()
    应该是.start()