Java JOptionPane和扫描仪输入问题
我正在编写一个程序,其中某一时刻,我需要使用JOptionPane在窗口上打印一个字符串。该行的代码如下所示:Java JOptionPane和扫描仪输入问题,java,string,window,java.util.scanner,joptionpane,Java,String,Window,Java.util.scanner,Joptionpane,我正在编写一个程序,其中某一时刻,我需要使用JOptionPane在窗口上打印一个字符串。该行的代码如下所示: JOptionPane.showMessageDialog(null, "Name: " + a.getName()); getName函数引用我创建的对象a,该对象有一个返回字符串的方法。然而,当我的代码达到这一点时,程序似乎进入了某种无限循环,因为窗口永远不会弹出,当使用debug时,它似乎永远不会结束 主要的是,当我使用getName时,我允许用户在主驱动程序的前面使用不同的函
JOptionPane.showMessageDialog(null, "Name: " + a.getName());
getName函数引用我创建的对象a,该对象有一个返回字符串的方法。然而,当我的代码达到这一点时,程序似乎进入了某种无限循环,因为窗口永远不会弹出,当使用debug时,它似乎永远不会结束
主要的是,当我使用getName时,我允许用户在主驱动程序的前面使用不同的函数设置这个名称
getName()基本上是一行,返回name
my setName()函数的代码基本上是:
Scanner a = new Scanner(System.in);
System.out.print("Pick a name: ");
name = in.nextLine();
a.close();
Name是类中的私有变量。close()不是必需的,但我尝试了一下,看看它是否有任何效果
我注意到的是,如果我使用上面的代码,窗口永远不会弹出,我会陷入无限循环。但是,如果我只是将name=行更改为任何内容,例如:
name = "foo";
代码运行平稳,窗口弹出,我不会陷入循环。即使当程序提示我输入名称时,我没有输入名称,导致空字符串,窗口仍然不会弹出。有人能帮我解释一下为什么会发生这种情况吗?谢谢。使用
扫描器
操作在WaitDispatchSupport
类中创建一个块,该类由作业窗格
使用,用于检查非分派线程是否没有阻塞IO。调用Scanner.close()
不会解除线程阻塞
一种解决方案是从以下位置调用showMessageDialog
:
此代码段可以帮助您
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final String s = scanner.nextLine();
SwingUtilities.invokeLater(() -> {
JDialog dialog = new JDialog();
dialog.setAlwaysOnTop(true);
JOptionPane.showMessageDialog(dialog, s);
});
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
final String s = scanner.nextLine();
SwingUtilities.invokeLater(() -> {
JDialog dialog = new JDialog();
dialog.setAlwaysOnTop(true);
JOptionPane.showMessageDialog(dialog, s);
});
}