我在运行线程时遇到问题。看,我想要一个纯粹用于缓慢打印一段文本的类,即在每个字母之间等待 x 毫秒(把它想象成神奇宝贝中文本的显示方式!)。所以目前,我有一个 Main 类和一个静态的“Print”类。在 Print 类中有一个名为 slow 的静态方法。你传入一个字符串和每个字母之间的延迟。问题是,如果在我的主课上我说
Print.slow("Hello there, enter your name");
System.out.println("NAME:");
name = (scanner object).nextLine();
发生的情况是,在读取“你好,输入你的名字”时,你可以输入输入!我仍然需要 Print.slow() 方法来休眠,那么我怎样才能让 main 方法暂停,直到文章被阅读?
printSlow 方法(将 Print 类重构为 main 中的方法)
public static void printSlow(String passage, int delay)
{
int normDelay = delay;
char lastChar = 'a';
for(int i=0; i<passage.length(); i++)
{
try {
if(passage.charAt(i) == '.' && passage.charAt(i + 1) == '.') {
System.out.print(".");
try {
Thread.sleep(normDelay*10);
} catch (InterruptedException e) {
e.printStackTrace();
}
continue;
}
} catch (Exception e) {
System.out.print(".");
try {
Thread.sleep(normDelay*10);
}catch(InterruptedException e1) {
e1.printStackTrace();
}
continue;
}
if(passage.charAt(i) == ' ' && (lastChar == ',' || lastChar == '.' || lastChar == '!' || lastChar == '?'))
{
continue;
}else
{
System.out.print(passage.charAt(i));
}
if(passage.substring(i, i + 1).equals(".")
|| passage.substring(i, i + 1).equals(",")
|| passage.substring(i, i + 1).equals("!")
|| passage.substring(i, i + 1).equals("?"))
{
System.out.println();
delay = normDelay * 10;
}
try
{
Thread.sleep(delay);
delay = normDelay;
}
catch(InterruptedException e)
{
System.out.println(e);
}
lastChar = passage.charAt(i);
}
}
它如此复杂的原因是因为我在每次句号、逗号等之后需要更长的延迟,而且连续三个句号最终不会跳过 3 行。