在Java applet中显示FTP文件上载期间的进度
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Java applet中显示FTP文件上载期间的进度,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3770字,纯文字阅读大概需要6分钟。
内容图文
![在Java applet中显示FTP文件上载期间的进度](/upload/InfoBanner/zyjiaocheng/708/3b8359e3eca04fb78b16a78bd6df9099.jpg)
好的,所以我让上传者使用Java FTP上传文件,我想更新标签和进度条.带有百分比文本的标签,带有百分比int值的栏.现在使用当前代码只能在上传结束时获得100和完整栏.在上传过程中,没有一个改变.
这里是:
OutputStream output = new BufferedOutputStream(ftpOut);
CopyStreamListener listener = new CopyStreamListener() {
public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) {
System.out.printf("\r%-30S: %d / %d", "Sent", totalBytesTransferred, streamSize);
ftpup.this.upd(totalBytesTransferred,streamSize);
}
public void bytesTransferred(CopyStreamEvent arg0) { }
};
Util.copyStream(input, output, ftp.getBufferSize(), f.length(), listener);
}
public void upd(long num, long size){
int k = (int) ((num*100)/size);
System.out.println(String.valueOf(k));
this.d.setText(String.valueOf(k));
//d.setText(String.valueOf(k));
progressBar.setValue(k);
}
解决方法:
从它的声音(并且没有任何证据到声明),听起来你的处理在Event Dispatching Thread中是一个耗时的动作
您可能希望阅读Concurrency in Swing以获得进一步的见解
我建议使用SwingWorker来执行实际的转移&利用其内置的进度支持
看到源代码后更新
>请勿将重量较重的部件与轻质部件混合使用.将Applet更改为JApplet,将TextField更改为JTextField,不要使用Canvas使用JPanel或JComponent
>如果您希望其他人阅读您的代码,请为您的变量使用专有名称,我不知道p是什么.
>你的线程没用.而不是启动线程并使用它的运行方法,您只需在其构造函数中进行下载调用.这对你没什么用……
删除MyThread的实现并替换为
public class MyWorker extends SwingWorker<Object, Object> {
private URL host;
private File outputFile;
public MyWorker(URL host, File f) {
this.host = host;
outputFile = f;
}
@Override
protected Object doInBackground() throws Exception {
// You're ignoring the host you past in to the constructor
String hostName = "localhost";
String username = "un";
String password = "pass";
String location = f.toString();
//FTPClient ftp = null;
ftp.connect(hostName, 2121);
ftp.login(username, password);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.setKeepAlive(true);
ftp.setControlKeepAliveTimeout(3000);
ftp.setDataTimeout(3000); // 100 minutes
ftp.setConnectTimeout(3000); // 100 minutes
ftp.changeWorkingDirectory("/SSL");
int reply = ftp.getReplyCode();
System.out.println("Received Reply from FTP Connection:" + reply);
if (FTPReply.isPositiveCompletion(reply)) {
System.out.println("Connected Success");
}
System.out.println(f.getName().toString());
File f1 = new File(location);
in = new FileInputStream(f1);
FileInputStream input = new FileInputStream(f1);
// ftp.storeFile(f.getName().toString(),in);
//ProgressMonitorInputStream is= new ProgressMonitorInputStream(getParent(), "st", in);
OutputStream ftpOut = ftp.storeFileStream(f.getName().toString());
System.out.println(ftpOut.toString());
//newname hereSystem.out.println(ftp.remoteRetrieve(f.toString()));
OutputStream output = new BufferedOutputStream(ftpOut);
CopyStreamListener listener = new CopyStreamListener() {
public void bytesTransferred(final long totalBytesTransferred, final int bytesTransferred, final long streamSize) {
setProgress((int) Math.round(((double) totalBytesTransferred / (double) streamSize) * 100d));
}
@Override
public void bytesTransferred(CopyStreamEvent arg0) {
// TODO Auto-generated method stub
}
};
Util.copyStream(input, output, ftp.getBufferSize(), f.length(), listener);
return null;
}
}
在你的ActionListener中用o(??)替换线程执行代码
try {
MyWorker worker = new MyWorker(new URL("http://localhost"), file);
worker.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals("progress")) {
Integer progress = (Integer) evt.getNewValue();
progressBar.setValue(progress);
}
}
});
worker.execute();
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
注意.您忽略了传递给构造函数的URL. http://不是ftp://所以我怀疑这会起作用……
内容总结
以上是互联网集市为您收集整理的在Java applet中显示FTP文件上载期间的进度全部内容,希望文章能够帮你解决在Java applet中显示FTP文件上载期间的进度所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。