gpt4 book ai didi

java - java swing 创建线程

转载 作者:行者123 更新时间:2023-12-02 05:48:31 24 4
gpt4 key购买 nike

作为一个更大项目的一部分,我试图创建一个线程,在 Java swing 上创建一个新的 Jframa,然后执行从一个文件夹到另一个文件夹的文件复制。为此,我创建了一个线程,并在其构造函数中构建了 GUI,并从主线程开始执行线程。我的问题是新的 JFrame 是空白的,直到复制完成并且它显示标签、文本框等。我无法理解我是否做错了什么,所以有点头脑将不胜感激

框架类:

public class FileCopyFrame extends JFrame{
private void BuildGUI(final String sourcePath,final String targetPath) {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 665, 382);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);

progressBar = new JProgressBar();
progressBar.setBounds(10, 268, 631, 14);
contentPane.add(progressBar);

progressBar_all = new JProgressBar();
progressBar_all.setBounds(10, 293, 631, 14);
contentPane.add(progressBar_all);

JScrollPane scrollPane = new JScrollPane();
scrollPane.setBounds(10, 88, 631, 166);
contentPane.add(scrollPane);

textAreaAnnouncements = new JTextArea();
scrollPane.setViewportView(textAreaAnnouncements);

btnCancel = new JButton("Cancel");
btnCancel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {

}
});
btnCancel.setBounds(267, 318, 89, 23);
contentPane.add(btnCancel);

final JLabel lblSourcePath = new JLabel("Source Path:");
lblSourcePath.setFont(new Font("Tahoma", Font.PLAIN, 13));
lblSourcePath.setBounds(10, 35, 78, 14);
contentPane.add(lblSourcePath);

final JLabel lblTargetPath = new JLabel("Target Path:");
lblTargetPath.setFont(new Font("Tahoma", Font.PLAIN, 13));
lblTargetPath.setBounds(10, 60, 78, 17);
contentPane.add(lblTargetPath);

textFieldSrcPth = new JTextField();
textFieldSrcPth.setBounds(96, 32, 545, 20);
contentPane.add(textFieldSrcPth);
textFieldSrcPth.setText(sourcePath);
textFieldSrcPth.setColumns(10);

textFieldTrgPth = new JTextField();
textFieldTrgPth.setBounds(96, 57, 545, 20);
contentPane.add(textFieldTrgPth);
textFieldTrgPth.setText(targetPath);
textFieldTrgPth.setColumns(10);

}

public FileCopyFrame(String source,String path) {
BuildGUI(source,path);
}
}

线程类:

public class CopyThread extends Thread {
FileCopyFrame frame;
public CopyThread(ThreadOptions options){
frame=new FileCopyFrame(destinationPath, destinationPath);
frame.setVisible(true);
current=frame.getProgressBarCurrent();
All=frame.getProgressBarCurrentAll();
this.textPane = frame.getTextAreaAnnouncements();
setOptions(options);


}


public void run() {
try {
Copy();
} catch (Exception e) {
e.printStackTrace();
}
}

在主线程:

CopyThread thread=new CopyThread(options);
thread.run();

最佳答案

thread.run();

这不会启动新线程。这只是执行 run() 方法。由于您可能从事件调度线程 (EDT) 调用此代码,因此创建 GUI 和执行复制的代码也在 EDT 上执行,这意味着在复制完成之前 GUI 无法重新绘制自身。

要创建一个新线程,您应该执行以下操作:

thread.start();

关于java - java swing 创建线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23793077/

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