2016-03-15 44 views
4

我正在尝试新的JShell程序与java9 jdk。我想调试我正在制作的交互式控制台应用程序,但似乎System.in不起作用。例如:寻找JShell输入解决方法

[[email protected] home]# jdk-9/bin/jshell 
| Welcome to JShell -- Version 9-ea 
| Type /help for help 

-> new Scanner(System.in).next() 
  

它只是在这里冻结并完全锁定键盘。我必须在另一个终端上杀死进程才能让我的提示恢复。

由于mlk指出,它看起来像这是一个known bug。有没有人找到解决方法?


My specs: Redhat x86_64, Gnome-Terminal, Java9 Build 109 
+0

我觉得这是[已知的bug](https://bugs.openjdk.java.net/browse/JDK-8131023)。 –

+0

@mlk这真的令人失望。我也没有看到任何解决方法。期待着尝试一下,但我想我必须等到这个错误得到解决。 – flakes

+0

这是否仅限于JDK 9? –

回答

1

唯一的解决方法,我发现被分配 “输入” 的字符串,并使用Scannerconstructor接受字符串:

public Scanner(String source)

构造新Scanner产生从指定字符串扫描的值 。


-> String input = "Hello world" 
| Added variable input of type String with initial value "Hello world" 

-> Scanner sc = new Scanner(input) 
| Modified variable sc of type Scanner with initial value java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\QNaN\E][infinity string=\Q∞\E] 

-> sc.next() 
| Expression value is: "Hello" 
| assigned to temporary variable $5 of type String 
+0

这个解决方案并不适合我。我不得不撕掉很多代码。我一直在玩重定向system.in到一个自定义的输入流,并在另一个线程上创建扫描器 – flakes

+0

@flkes JShell并不意味着用于编写复杂的代码部分。它应该用来测试一些小东西,而不是实现多线程项目。为此,我仍然会使用IDE创建一个测试项目。 – Maroun

+2

我不是在jshell中编写代码,只是调试它。我应该可以使用jshell并测试我的api。 – flakes

1

这是一个错误并已固定的(之前JDK 9的释放)。

jshell> new Scanner(System.in).next() 
r 
$1 ==> "r" 
相关问题