(Java)在控制台中逐字打印文本-英尺滞后

(Java)在控制台中逐字打印文本-英尺滞后,java,text,console,lag,Java,Text,Console,Lag,因此,我正在制作一个在JavaIDE中只使用控制台的游戏,但是我在使用延迟时遇到了一个问题。我的目标是创建一个方法,当文本通过参数时,它以50的延迟逐字母打印。(有点像口袋妖怪系列中的文本,它是如何滚动每个字母的) 我的问题是滞后。我运行的是amd fx-8350 cpu(4GHz,4核+4虚拟核)。每当我将延迟量更改为100毫秒左右或100毫秒以下时,控制台都会打印半个单词,然后打印另一半的一点,然后打印半个句子,然后可能打印一个字符,等等 我在这里尝试过这段代码(它可以工作,但有滞后): 该

因此,我正在制作一个在JavaIDE中只使用控制台的游戏,但是我在使用延迟时遇到了一个问题。我的目标是创建一个方法,当文本通过参数时,它以50的延迟逐字母打印。(有点像口袋妖怪系列中的文本,它是如何滚动每个字母的)

我的问题是滞后。我运行的是amd fx-8350 cpu(4GHz,4核+4虚拟核)。每当我将延迟量更改为100毫秒左右或100毫秒以下时,控制台都会打印半个单词,然后打印另一半的一点,然后打印半个句子,然后可能打印一个字符,等等

我在这里尝试过这段代码(它可以工作,但有滞后):

该代码也适用(同样适用,具有相同的滞后量):

public void滚动(字符串文本){

对于(int i=0;i首先,一些关于代码的随机注释。这是错误的:

for(int i = 0; i <= text.length(); i++){
在第一个例子中,情况更糟。您可以使用
text.charAr(i)


我尝试了以下代码作为替代:

for(int i = 0; i < text.length(); i++) {
    long start = System.currentTimeMillis();
    while (System.currentTimeMillis() - start < 50) {

    }
    System.out.print(text.charAt(i));
}
for(int i=0;i
它在IntelliJ中仍然不起作用。但是它和您的代码在终端中工作得很好,所以我认为IntelliJ只是不喜欢立即打印。
flush
没有什么区别,但是它在
OutputStream
中的文档提示了可能发生的情况:

如果此流的预期目的地是底层操作系统提供的抽象,例如文件,则刷新流只能保证将先前写入流的字节传递给操作系统进行写入;而不能保证它们实际写入到物理设备(如dis)k路


因此,我再次认为IDE是问题所在,它超出了您代码的控制。

首先,关于您代码的一些随机注释。这是错误的:

for(int i = 0; i <= text.length(); i++){
在第一个例子中,情况更糟。您可以使用
text.charAr(i)


我尝试了以下代码作为替代:

for(int i = 0; i < text.length(); i++) {
    long start = System.currentTimeMillis();
    while (System.currentTimeMillis() - start < 50) {

    }
    System.out.print(text.charAt(i));
}
for(int i=0;i
它在IntelliJ中仍然不起作用。但是它和您的代码在终端中工作得很好,所以我认为IntelliJ只是不喜欢立即打印。
flush
没有什么区别,但是它在
OutputStream
中的文档提示了可能发生的情况:

如果此流的预期目的地是底层操作系统提供的抽象,例如文件,则刷新流只能保证将先前写入流的字节传递给操作系统进行写入;而不能保证它们实际写入到物理设备(如dis)k路


因此,我再次认为IDE是问题所在,它超出了您的代码控制。

尝试在每次打印后添加
System.out.flush
。两个示例没有区别:(顺便说一下,我正在使用intelliJ(如果这有区别,我怀疑它会有区别)尝试在每次打印后添加
System.out.flush
。两个示例没有区别:(顺便说一句,我正在使用intelliJ(如果这有什么不同,请怀疑它会有什么不同)
text.substring(i, i + 1)
for(int i = 0; i < text.length(); i++) {
    long start = System.currentTimeMillis();
    while (System.currentTimeMillis() - start < 50) {

    }
    System.out.print(text.charAt(i));
}