我是 Java 新手。我想编写一个程序来生成文件,并且我想使用进度条来显示压缩的进度有我的代码,但是当工作完成时它不能工作只显示 100%。
getContentPane().add(progressBar);
progressBar.setBorder(new CompoundBorder(null, null));
springLayout.putConstraint(SpringLayout.EAST, progressBar, 0, SpringLayout.EAST, messageLabel);
springLayout.putConstraint(SpringLayout.WEST, progressBar, 0, SpringLayout.WEST, messageLabel);
springLayout.putConstraint(SpringLayout.SOUTH, progressBar, 165, SpringLayout.NORTH, getContentPane());
springLayout.putConstraint(SpringLayout.NORTH, progressBar, 5, SpringLayout.SOUTH, uploadLocalButton);
progressBar.setValue(0);
progressBar.setMaximum(100);
progressBar.setMinimum(0);
progressBar.setStringPainted(true);
...
public void doZip(String filename,String outFilename)
{
try {
byte[] dataBytes = new byte[1024];
File file = new File(outFilename);
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
ZipOutputStream zos = new ZipOutputStream(fos);
File fil = new File(filename); //"Users/you/image.jpg"
long length= fil.length();
System.out.println(length);
zos.putNextEntry(new ZipEntry(fil.getName()));//image.jpg
FileInputStream in = new FileInputStream(filename);
int current=0;
int len;
while ((len = in.read(dataBytes)) > 0)
{ current += len;
messageLabel.setText(Integer.toString(current));
System.out.println(current);
final double progres=(((double)current/(double)length)*100);
progressBar.setValue((int)progres);
zos.write(dataBytes, 0, dataBytes.length);
}
zos.closeEntry();
zos.close();
in.close();
}catch (IOException e) {
JOptionPane.showMessageDialog(null,
"Access denied. File or patch not exist or in currently in use.","Error",
JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}}
也许有人知道问题出在哪里?
我按下按钮调用doZip。我试过这个
while ((len = in.read(dataBytes)) > 0)
{ current += len;
zos.write(dataBytes, 0, dataBytes.length);
final double progres=(((double)current/(double)length)*100);
try{
SwingUtilities.invokeLater(new Runnable(){
public void run(){
progressBar.setValue((int)progres);
}
});
java.lang.Thread.sleep(100);
}catch(InterruptedException e){;}
但它也不起作用,只会使拉链操作的过程更长。