gpt4 book ai didi

java - Thread.sleep() 有时不工作

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

对于错误的标题表示歉意。我正在开发一个使用 JTextPane 作为主要 TextView 的游戏。我使用以下代码打印到 Pane :

public void write(String txt, MessageType t) {
try {
for (char c : txt.toCharArray()) {
text.getDocument().insertString(text.getDocument().getLength(), String.valueOf(c), t.getAttributes());
Utils.pause(30);
}
text.getDocument().insertString(text.getDocument().getLength(), "\n", t.getAttributes());
}
catch (Exception e) { e.printStackTrace(); }
}

该代码一次写入一个字符,每次写入之间 hibernate 30 毫秒。然后它写入一个新行字符。如果您感兴趣的话,这是暂停()方法:

public static void pause(int millis) {
try { Thread.sleep(millis); }
catch (InterruptedException e) { e.printStackTrace(); }
}

大多数时候,这都可以正常工作。它在每个字符之间留有一些空格,给人一种打字的感觉。但是,在一种情况下它不起作用。

我有一个处理输入的 JTextField。我向其中添加了这个 KeyListener:

input.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
CommandParser.getInstance().parse(input.getText());
input.setText("");
}
}
});

在 CommandParser 的 parse() 方法末尾,如果未找到命令,则运行此行:

Game.getInstance().getGUI().write("Invalid command.", GUI.MessageType.BAD);

但是,仅对于该行,程序会等待一秒钟,然后立即打印所有内容,而不是每 30 毫秒打印一个字符。为什么是这样?这与内部类有关吗?

最佳答案

这是因为您的操作发生在 EDT 线程上。在您从该方法返回之前,GUI 根本不会更新。您需要使用 SwingWorkerSwingTimer 之类的工具将更新传送到另一个线程。

关于java - Thread.sleep() 有时不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21356199/

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