java 顺序执行_java方法中的代码执行顺序问题,如何保证严格按照顺序执行?

客户端向服务器发送文件,点击发送按钮后,希望按如下顺序执行:1、在文本区中添加文本“开始传输文件......\n”2、根据传输的字节计算完成进度,并实时更新进度条3、向文本中添加文本...

客户端向服务器发送文件,点击发送按钮后,希望按如下顺序执行:

1、在文本区中添加文本“开始传输文件......\n”

2、根据传输的字节计算完成进度,并实时更新进度条

3、向文本中添加文本“传输完成,总计耗时:.....”

但是实际执行结果为,传输期间进度条没有实时更新,当文件全部传输完成后,一次性添加了1和3的文本,进度条直接从0变成了100。

这是为什么呢,请大家指点一二。下面是按钮触发的函数。

public void actionPerformed(ActionEvent e) {

fileInfo.append("开始传输文件......\n");//fileInfo是文本区

long startTime = System.currentTimeMillis();//记录当前时间

FileInputStream fileInputStream = null;//创建文件输入流

try {

fileInputStream = new FileInputStream(file);

dataOutputStream = new DataOutputStream(socket.getOutputStream());//初始化socket的输出流

String fileName = file.getName();

dataOutputStream.writeUTF(fileName);//向IO流写入文件名称

long fileLength = file.length();

dataOutputStream.writeLong(fileLength);//向IO流写入文件大小

byte[] toSend = new byte[1024 * 1024];//字节缓冲区,每次写入1MB大小

long total = 0;//累计写入字节数

int i = -1;//单次写入字节数,初始值-1

dataInputStream = new DataInputStream(fileInputStream);

while ((i = dataInputStream.read(toSend)) != -1) {//循环向IO流写入字节数组

dataOutputStream.write(toSend, 0, i);//写入实际读取到的字节数

dataOutputStream.flush();

total += i;//更新累计读取到的字节数

double rate = (double) total / fileLength;//生成读取进度

progressBar.setValue((int) (rate * 100));//动态更新进度条

progressBar.setString(numFormat(rate));//动态更新进度条的字符

}

long endTime = System.currentTimeMillis();//记录结束时间

fileInfo.append("传输完成,总计耗时:" + (endTime - startTime) / 1000 + "秒\n");//向文本区添加时间记录

} catch (IOException ex) {

ex.printStackTrace();

} finally {

if (fileInputStream != null) {//释放文件资源

try {

fileInputStream.close();

fileInfo.append("文件资源已释放!\n");

} catch (IOException ex) {

ex.printStackTrace();

}

}

try {

socket.shutdownOutput();//禁用socket输入流,结束本次传输

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值