当前位置: 代码迷 >> Java相关 >> 进度条就是不显示啊怎么回事
  详细解决方案

进度条就是不显示啊怎么回事

热度:59   发布时间:2016-04-22 20:59:49.0
进度条就是不显示啊,咋回事?

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class PracticeFromNett extends JFrame{

private static final long serialVersionUID = 1L;
JTextArea ja=new JTextArea();

public PracticeFromNett(){
super("JFrame");
Container cn=getContentPane();
setLayout(new BorderLayout());
JScrollPane js=new JScrollPane(ja);
js.setPreferredSize(new Dimension(180,120));
ja.setLineWrap(true);
JButton jb1=new JButton("写入文件");
JButton jb2=new JButton("读取文件");
jb1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
FileOutputStream filewr=new FileOutputStream("word.txt");
DataOutputStream datin=new DataOutputStream(filewr);

datin.writeUTF(ja.getText());
ja.setText("");
filewr.close();
}catch(Exception x){
x.printStackTrace();
}
}
});

jb2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
try{
FileInputStream filein=new FileInputStream("word.txt");
ProgressMonitorInputStream monitorin=
new ProgressMonitorInputStream(null,"读取文件",filein);

byte[] b=new byte[4];

while(monitorin.available()>0){
monitorin.read(b);
String x=new String(b);
ja.append(x);
System.out.print(x);
Thread.sleep(200);
}
monitorin.close();
}catch(Exception w){
w.printStackTrace();
}
}
});
JPanel jp=new JPanel();
jp.add(jb1);
jp.add(jb2);
cn.add(js,BorderLayout.NORTH);
cn.add(jp,BorderLayout.SOUTH);

setVisible(true);
setSize(300,200);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
new PracticeFromNett();
}
}

------解决方案--------------------

    

                jb2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new Thread(new Runnable() {
@Override
public void run() {
try {
FileInputStream filein = new FileInputStream("word.txt");
ProgressMonitorInputStream monitorin = new ProgressMonitorInputStream(null, "读取文件", filein);
ProgressMonitor progressMonitor = monitorin.getProgressMonitor();

int all = monitorin.available();
int readed = 0;
byte[] b = new byte[4];
while (all > 0) {
int in = monitorin.read(b);
readed += in;

String x = new String(b);
ja.append(x);
System.out.print(x);

double process = Math.floor((float) readed / all * 100);// 算出百分比
progressMonitor.setNote(process + " %");// 显示在进度条上

Thread.sleep(5);// 故意放慢速度好看清进度条, 数字不能太大
}
monitorin.close();
} catch (Exception w) {
w.printStackTrace();
}
}
}).start();
}
}); 
      

actionPerformed中必须启动一个线程, 否则进度条显示不了, 其原因我猜应该是swing和进度条不能共用一个主线程来运行.
  相关解决方案