2016-03-15 73 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"