gpt4 book ai didi

java - JOptionPane 和 Scanner 输入问题

转载 作者:行者123 更新时间:2023-11-30 11:37:54 25 4
gpt4 key购买 nike

我正在编写一个程序,有时我需要使用 JOptionPane 在窗口上打印一个字符串。该行的代码如下所示:

JOptionPane.showMessageDialog(null, "Name: " + a.getName());

getName 函数引用我创建的对象 a,它有一个返回字符串的方法。然而,当我的代码到达这一点时,程序似乎进入了某种无限循环,因为窗口永远不会弹出,并且在使用调试时,它似乎永无止境。

最主要的是,当我使用 getName 时,我允许用户在主驱动程序的早期使用不同的函数设置此名称。

getName() 基本上是一行,返回名字;

我的 setName() 函数的代码基本上是:

Scanner a = new Scanner(System.in);
System.out.print("Pick a name: ");
name = in.nextLine();
a.close();

Name 是类中的私有(private)变量。 close() 不是必需的,但我试过它是否有任何效果。

我注意到的是,如果我使用上面的代码,窗口永远不会弹出,我陷入了无限循环。但是,如果我只是将 name = 行更改为任何内容,例如:

name = "foo";

代码运行流畅,窗口弹出,没有卡死。即使我在程序提示我输入名称时没有输入名称,结果是一个空字符串,该窗口仍然不会弹出。谁能帮助我并告诉我为什么会这样?谢谢。

最佳答案

使用 Scanner 操作在 JOptionPane 使用的 WaitDispatchSuport 类中创建一个 block ,它检查非调度线程是否没有阻塞 IO。调用 Scanner.close() 不会解除对线程的阻塞。

一种解决方案是从 EDT 调用 showMessageDialog :

Scanner a = new Scanner(System.in);
System.out.print("Pick a name: ");
final String name = a.nextLine();

SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
JOptionPane.showMessageDialog(null, "Name: " + name);
}
});

关于java - JOptionPane 和 Scanner 输入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13868528/

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