Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JOptionPane和扫描仪输入问题_Java_String_Window_Java.util.scanner_Joptionpane - Fatal编程技术网

Java 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在窗口上打印一个字符串。该行的代码如下所示:

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);
        });
}