Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
下载文件时java GUI冻结_Java_Multithreading_Swing_User Interface_Swingworker - Fatal编程技术网

下载文件时java GUI冻结

下载文件时java GUI冻结,java,multithreading,swing,user-interface,swingworker,Java,Multithreading,Swing,User Interface,Swingworker,当我单击GUI上的按钮时,它会冻结,并且标签和按钮在文件下载之前不会更改: 我必须在新的线程上开始下载吗?如果我在一个新线程上启动它,仍然可以使用进度条吗?我还是java新手,所以如果我做得完全错误,我很抱歉。这是java Swing编程101。当您执行耗时较长的任务时,必须在不同的线程中执行这些任务。否则,在任务完成之前,UI线程将暂停并不会分派任何事件。看看SwingWorker的。这就是当某些内容发生变化时创建线程和更新UI的方法 这是Java Swing编程101。当您执行耗时较长的任

当我单击GUI上的按钮时,它会冻结,并且标签和按钮在文件下载之前不会更改:


我必须在新的线程上开始下载吗?如果我在一个新线程上启动它,仍然可以使用进度条吗?我还是java新手,所以如果我做得完全错误,我很抱歉。

这是java Swing编程101。当您执行耗时较长的任务时,必须在不同的线程中执行这些任务。否则,在任务完成之前,UI线程将暂停并不会分派任何事件。看看SwingWorker的
。这就是当某些内容发生变化时创建线程和更新UI的方法

这是Java Swing编程101。当您执行耗时较长的任务时,必须在不同的线程中执行这些任务。否则,在任务完成之前,UI线程将暂停并不会分派任何事件。看看SwingWorker的
。这就是当某些内容发生变化时创建线程和更新UI的方法

我必须在新的线程上开始下载吗

对。一个荡秋千的人很适合做这件事

如果我在一个新线程上启动它,仍然可以使用进度条吗

对。您是否已经阅读了有关进度条的Swing教程?它将展示如何使用这些示例代码

我必须在新的线程上开始下载吗

对。一个荡秋千的人很适合做这件事

如果我在一个新线程上启动它,仍然可以使用进度条吗


对。您是否已经阅读了有关进度条的Swing教程?它将展示如何将这些与示例代码一起使用。

是的,您需要在单独的线程上进行下载。事实上,这将允许您使用进度条


使用SwingWorker运行长时间运行的任务。本教程将对进度条提供帮助:

是的,您需要在单独的线程上进行下载。事实上,这将允许您使用进度条


使用SwingWorker运行长时间运行的任务。本教程将对进度条有所帮助:

感谢您提供的链接,它确实很有帮助。谢谢你的帮助,谢谢你的链接,真的很有帮助。我感谢你的帮助。
public class download {
    public static void Download() {
        final String saveTo = System.getProperty("user.home").replace("\\", "/") + "/Desktop/";
        try {
            URL url = null;
            url = new URL("http://cachefly.cachefly.net/10mb.test");
            ReadableByteChannel rbc = Channels.newChannel(url.openStream());
            FileOutputStream fos = new FileOutputStream(saveTo + "10mb.test");
            fos.getChannel().transferFrom(rbc, 0, 1 << 24);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
public void download_buttonActionPerformed(ActionEvent e) {
        download_button.setEnabled(false);
        label_status.setText("- Downloading...");
        download.Download();
    }