gpt4 book ai didi

Java程序 "freezes shortly"

转载 作者:行者123 更新时间:2023-12-01 17:22:24 25 4
gpt4 key购买 nike

我是 Java 新手,它不是我的第一种编程语言。我实际上尝试编写一个下载器来下载所有文件,直到服务器上的版本与客户端版本相同。

程序运行良好,但这是我无法解决的问题。

如果我运行这段代码:

private void updateContent()
{
DownloadButton.setEnabled(false);
SaveLocationButton.setEnabled(false);
UpdateText.setText("Update to Version " + ServerVersionNumber + "...");
UpdateText.setForeground(new Color(200, 150, 0, 255));
ProgressText.setText("(1/2) Files will be downloaded");
ProgressText.setForeground(new Color(200, 150, 0, 255));
LoadingBar.setStringPainted(true);

for(int i = 1; i < (ServerVersionNumber - LocalVersionNumber + 1); i++)
{
int CurrentUpdateFile = LocalVersionNumber + i;


try
{
URL FileURL = new URL(Host + CurrentUpdateFile + ".zip");

try {
FileURL.openConnection();


InputStream reader = FileURL.openStream();
FileOutputStream writer = new FileOutputStream(ContentSaveDirectory + CurrentUpdateFile + ".zip");

byte[] buffer = new byte[153600];
int bytesRead = 0;


while ((bytesRead = reader.read(buffer)) > 0)
{
writer.write(buffer, 0, bytesRead);
buffer = new byte[153600];
}

writer.close();
reader.close();

}
catch (IOException e)
{
e.printStackTrace();
}

}
catch (MalformedURLException e)
{
e.printStackTrace();
}
}
}

下载所有文件后,诸如 DownloadButton.setEnabled(false); 之类的所有内容以及下面的几行都会发生更改,有人能告诉我为什么吗?

最佳答案

如果您从事件处理程序调用此方法,它将在事件分派(dispatch)线程中执行,并且下载会阻止重绘和事件处理。另一方面,对 GUI 的更新只能从事件分派(dispatch)线程完成。请参阅http://docs.oracle.com/javase/tutorial/uiswing/concurrency/

最简单的修复方法是启动一个新的下载线程,如下所示。为了更好地与 GUI 集成,例如在下载完成时更新它,请参阅教程。

private void updateContent()
{
DownloadButton.setEnabled(false);
SaveLocationButton.setEnabled(false);
UpdateText.setText("Update to Version " + ServerVersionNumber + "...");
UpdateText.setForeground(new Color(200, 150, 0, 255));
ProgressText.setText("(1/2) Files will be downloaded");
ProgressText.setForeground(new Color(200, 150, 0, 255));
LoadingBar.setStringPainted(true);

new Thread() {
public void run() {
for(int i = 1; i < (ServerVersionNumber - LocalVersionNumber + 1); i++)
{
// the rest
}
}
}.start();
}

关于Java程序 "freezes shortly",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17633553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com