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

客户端向服务器发送文件,点击发送按钮后,希望按如下顺序执行: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();
}
}
}
展开
 我来答
阳光的雷咩咩
2019-08-28 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7765万
展开全部
progressBar.set...
这些代码调用以后,看能不能跟着调用界面刷新的方法,refresh,update之类(不清楚java怎么写,我说的是C#的)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式