当前位置: 代码迷 >> J2SE >> 进度条没法更新,只在完成的时候更新一次
  详细解决方案

进度条没法更新,只在完成的时候更新一次

热度:37   发布时间:2016-04-24 00:21:21.0
进度条无法更新,只在完成的时候更新一次
我写了一个客户端和服务器端能相互发送信息和文件的一个程序,现在碰到的问题是发送端发送文件时不能正常更新进度条,只在最后更新一次,下面是客户端的代码,另外一个服务器的代码差不多。。。求帮忙看一下
Java code
package Fourth;public class TestClinet extends JFrame implements Runnable, ActionListener{    JTextField jts = new JTextField(15);    JButton send = new JButton("send");    JButton file=new JButton("file");    JProgressBar pro = new JProgressBar();     ScrollPane scp = new ScrollPane();    JTextArea swmag = new JTextArea(10, 20);    Socket sc = null;    DataInputStream dis = null;    DataOutputStream dos = null;    TestClinet() {        this.setLayout(new FlowLayout());        this.add(send);        send.setMnemonic(KeyEvent.VK_ENTER);        this.add(jts);        this.add(file);        this.add(pro);        scp.add(swmag);        scp.setBounds(0, 0, 200, 200);        this.add(scp);        send.addActionListener(this);        file.addActionListener(this);        pro.setOrientation(JProgressBar.HORIZONTAL);        pro.setMinimum(0);        pro.setMaximum(100);        pro.setValue(0);        pro.setStringPainted(true);        pro.setBackground(Color.red);        pro.setForeground(Color.GREEN);        try {            sc = new Socket("localhost", 5000);            dos = new DataOutputStream(sc.getOutputStream());            dis = new DataInputStream(sc.getInputStream());        } catch (Exception e) {            e.printStackTrace();        }        Thread th = new Thread(this);        th.start();    }    public static void main(String[] args) {        TestClinet mt = new TestClinet();        mt.setTitle("客户端");        mt.setVisible(true);        mt.setBounds(200, 200, 300, 300);        mt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    }    public void actionPerformed(ActionEvent e) {        if (e.getSource() == send) {            String str = jts.getText();            try {                dos.writeUTF(str);// 客户端发送信息                swmag.setText(swmag.getText() + "我:" + str+"  " +new Date().toLocaleString()+"\n");                jts.setText("");                dos.flush();            } catch (Exception e1) {                e1.printStackTrace();            }        }// send按钮结束        if(e.getSource()==file){            FileDialog fd=new FileDialog(this,"客户端");            fd.setVisible(true);            String filepath=fd.getDirectory()+fd.getFile();            File file=new File(filepath);            System.out.println(file);            FileInputStream fis=null;            System.out.println(file.length());            try{            dos.writeUTF("start");            dos.flush();            dos.writeLong(file.length());            dos.flush();            fis = new FileInputStream(file);                        double d=(double) file.length();            pro.invalidate();            for (long i = 0; i < file.length(); i++) {                int k = (int) (((i+1)/d)*100);                pro.setValue(k);                dos.write(fis.read());                System.out.println("客户端发送"+k);            }            fis.close();            dos.flush();            }catch(Exception e1){                e1.printStackTrace();            }        }            }    public void run() {        while(true){        try {            String str = dis.readUTF();            if(!("start".equals(str))){                swmag.setText(swmag.getText() + "他:" + str + "  "                        + new Date().toLocaleString() + "\n");                }                else{                    long length=dis.readLong();                    System.out.println(length);                    double d=(double) length;                    FileDialog fd=new FileDialog(this,"客户端");                    fd.setVisible(true);                    String filepath=fd.getDirectory()+fd.getFile();                    if(filepath.equals("nullnull"))return;                    File file=new File(filepath);                    FileOutputStream fos=new FileOutputStream(file);                    for(long i=0;i<length;i++){                        int k=(int) (((i+1)/d)*100);                        fos.write(dis.read());                        System.out.println("客户端接收"+k);                        pro.setValue(k);                        pro.invalidate();                    }                    fos.close();                }//if循环结束            Thread.sleep(1000);        } catch (Exception e) {            e.printStackTrace();        }        }    }}
  相关解决方案