gpt4 book ai didi

java - 在字符间隔上附加文本

转载 作者:太空宇宙 更新时间:2023-11-04 13:33:21 24 4
gpt4 key购买 nike

我正在尝试编写一个程序,参与者可以通过控制台与程序(I/O)进行通信。技巧是,控制台是 GUI 的一部分,因为我需要程序运行可执行 jar 文件。我用可滚动文本字段附加文本,如下所示

textArea.append(printChar);

我给该方法一个要使用的String,它使用嵌套的for循环来逐个字符地获取它,并附加每个Char(使用string.substring())。

我的问题是它在应该打印的整个时间都卡住了,然后只是显示全部内容。我不知道为什么,因为我使用 System.out.print 对其进行了测试,并且它完全按照我想要的方式工作。所以附加和打印是不同的。有什么想法吗?

另外,我使用 Thread.Sleep(100) 来计算等待时间。

public void actionPerformed(ActionEvent evt) {
if (!preforming){

preforming = true;
String input = textField.getText(); //Text from Input
textArea.append(dungeon.name + ": " + input + newline); //Add "text" to bottom of console
String[] output = dungeon.action(input);


//print everything in array output, char by char, with 2-3 seconds after each
for (int i = 0; i < output.length; i++){
String printThis = output[i];

if (printThis.length() > 0){
for (int j = 0; j < printThis.length(); j++){
String printChar = printThis.substring(j, j+1);
textArea.append(printChar);
//System.out.print(printChar);
try{
Thread.sleep(5);
} catch (InterruptedException e) {
System.out.print("Error ");
}
/*try { //useless
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
}
textArea.append("" + newline);
}


//cleaning up input bar
textField.setText("");
textField.selectAll();
//Make sure the new text is visible, even if there
//was a selection in the text area.
textArea.setCaretPosition(textArea.getDocument().getLength());
preforming = false;
}
}

最佳答案

当您显示更多代码时,我编辑了我的答案。由于您的代码中有一个外部循环,我只是将其包含在这个新编辑中的 timer 的 run 方法中。而且我没有 dungeon 的代码,所以我只是暂时用常量值替换它,以便程序可以在我的测试中运行。

public void actionPerformed(ActionEvent evt) {
java.util.Timer timer = new java.util.Timer();
timer.schedule(new java.util.TimerTask() {
public void run() {
if (!preforming){
preforming = true;
String newline = "\n";
String dungeonName = "Star Light";


String input = textField.getText(); //Text from Input
textArea.append(dungeonName + ": " + input + newline); //Add "text" to bottom of console
String[] output = {
"Twinkle twinkle little star.",
"How I wonder what you are.",
"Up above the world so high."
};


//print everything in array output, char by char, with 2-3 seconds after each
for (int i = 0; i < output.length; i++){
String printThis = output[i];

if (printThis.length() > 0){
for (int j = 0; j < printThis.length(); j++){
String printChar = printThis.substring(j, j+1);
textArea.append(printChar);
//System.out.print(printChar);
try{
Thread.sleep(25);
} catch (InterruptedException e) {
System.out.print("Error ");
}
/*try { //useless
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
}
textArea.append("" + newline);
}


//cleaning up input bar
textField.setText("");
textField.selectAll();
//Make sure the new text is visible, even if there
//was a selection in the text area.
textArea.setCaretPosition(textArea.getDocument().getLength());
preforming = false;
}
}
}, 1);
}

关于java - 在字符间隔上附加文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31950587/

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