gpt4 book ai didi

java - 复制过程中在 JTextArea 中显示

转载 作者:行者123 更新时间:2023-12-02 00:06:39 27 4
gpt4 key购买 nike

当复制正在进行时,我需要将所有 system.out.println 语句显示在 JTextArea 上。我尝试给出 ta.append 而不是 println 语句,但它不会显示。请让我知道我该怎么做。

public class copy {

public static void main(String args[]) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Copy c = new Copy();
c.setTitle("Copy folders");
c.setVisible(true);
}
});

JPanel jp = new JPanel();

TextArea ta = new JTextArea(5, 50);
ta.setEditable(false);
DefaultCaret caret = (DefaultCaret) ta.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
JScrollPane scrollPane = new JScrollPane(ta, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
scrollPane.setBounds(6, 625, 1035, 296);
jp.add(scrollPane); //Adding to JPanel
}

public Copy() {
build();
}

public void build() {
String source = "\\hostname\\d$\\somedirecotry";
String detination = "\\C:\\foldername";
File s = new File(source);
File s2 = new File(detination);

if (!s.exists()) {
System.out.println("Directory does not exist.");
} else if (!s2.exists()) {
System.out.println("Directory is not accessible or Server is down");
} else {
try {
copyFolder(s, s2);
} catch (IOException e) {
e.printStackTrace();
System.exit(0);
}
}
System.out.println("Done");
}

public static void copyFolder(File src, File dest)
throws IOException {
if (src.isDirectory()) {
//if directory not exists, create it
if (!dest.exists()) {
dest.mkdir();
System.out.println("Directory copied from " + src + " to " + dest);
}

//list all the directory contents
String files[] = src.list();

for (String file : files) {
File srcFile = new File(src, file);
File destFile = new File(dest, file);
copyFolder(srcFile, destFile);
}
} else {
//if file, then copy it
InputStream in = new FileInputStream(src);
OutputStream out = new FileOutputStream(dest);

byte[] buffer = new byte[1024];

int length;
//copy the file content in bytes
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}

in.close();
out.close();
System.out.println("File copied from " + src + " to " + dest);
}
}
}

最佳答案

Swing 是一个事件驱动环境,包括但不限于键盘、鼠标和绘画事件。

这些事件由事件调度线程传递。任何阻塞此线程的操作(例如但不限于循环、I/O 或 Thread#sleep)都将阻止(除其他外)开始处理绘制请求。这将使您的应用程序停止响应按键和鼠标事件,并使其看起来像是挂起的。

解决问题的最简单方法是将物理复制进程移至单独的线程。这可以通过使用 SwingWorker 轻松完成。

看看Concurrency in Swing ,特别是The Event Dispatch ThreadWorker Threads and SwingWorker

可以找到示例

关于java - 复制过程中在 JTextArea 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13694357/

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