gpt4 book ai didi

java - 如何将 JProgressBarr 进度绑定(bind)到 JButton 以防止其卡住?

转载 作者:行者123 更新时间:2023-12-02 05:57:42 25 4
gpt4 key购买 nike

这是我正在使用的 MAIN 类代码:

public class Main {

public static void main(String[] args) throws Exception {

MAINFRAME.GUI();
}
}

现在是关于从主类调用的大型机类:

public class MAINFRAME extends JFrame {

final static JProgressBar PROGBAR = new JProgressBar(0, 100);
final static JButton BUTTON = new JButton("START");
final static JFrame FRM = new JFrame();

private static ZipFile zipFile;
static BufferedInputStream bis;
static java.io.BufferedOutputStream bout;
static java.io.BufferedInputStream in;


public static void GUI() throws Exception {

//Some frame code

frm.add(PROGBAR);
frm.add(BUTTON);

//Some more frame code

BUTTON.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
MAINFRAME.DOWNLOAD();
}
catch (Exception e1) {
e1.printStackTrace();
}
}
});

//Some more code

public static final void DOWNLOAD() throws Exception {
try {
URL url=new URL(URLHERE);
HttpURLConnection connection =
(HttpURLConnection) url.openConnection();
int filesize = connection.getContentLength();
float totalDataRead=0;
in = new java.io.BufferedInputStream(connection.getInputStream());
java.io.FileOutputStream fos = new java.io.FileOutputStream(FILE);
bout = new BufferedOutputStream(fos,1024);
byte[] data = new byte[1024];
int i=0;
while((i=in.read(data,0,1024))>=0)
{
totalDataRead=totalDataRead+i;
bout.write(data,0,i);
float Percent=(totalDataRead*100)/filesize;
PROGBAR.setValue((int)Percent);
}

bout.close();
in.close();
}
}
catch(Exception e)
{
System.out.println("Error");
}
}

一切正常,下载解压等等,但是应该显示进度的栏一直卡住直到操作完成,并且当过程完成时继续 100%,现在,我红色了一些关于 InvokeLater 的东西,但我真的很努力了解如何在此处应用它以及它是如何工作的,提前谢谢您

最佳答案

为了避免 UI 阻塞,您必须将长时间运行的任务放入单独的线程中。

BUTTON.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
new Thread(new Runnable() {

@Override
public void run() {
MAINFRAME.DOWNLOAD();
}
}).start();
} catch (Exception e1) {
e1.printStackTrace();
}
}
});

您还可以使用SwingWorker。这是一个答案question关于它。

关于java - 如何将 JProgressBarr 进度绑定(bind)到 JButton 以防止其卡住?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22943928/

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