2012-03-13 15 views
6

Câu hỏi của tôi là nhanh chóng tôi đang làm việc trên một giao diện điều khiển nhỏ để đọc đầu vào và sau đó gọi mã thích hợp. Tôi đang sử dụng sbt và tôi đã gặp phải một vấn đề mà khi tôi cố gắng để đọc đầu vào sau khi chạy chương trình của tôi với sbt chạy, bên trong sbt giao diện điều khiển, hoặc ngay cả trong đồng bằng cũ scala thông dịch viên.Vấn đề với BufferedReader.readLine sử dụng sbt run hoặc sbt console

Lời nhắc dường như chỉ bị treo, nhưng nếu tôi nhấn trở lại, nó thực sự đọc đầu vào. Mặc dù bộ đệm của vỏ vẫn trống. Đây là mã chung mà tôi đã cố gắng đưa ra cho tôi vấn đề.

import java.io._ 

val s = new BufferedReader(new InputStreamReader(System.in)) 

val line = s.readLine 

println(line) 

Có ai biết tại sao điều này xảy ra và nếu có cách khắc phục điều này? Tôi rất thích có thể nhìn thấy những gì tôi gõ khi tôi chạy chương trình của tôi từ sbt. Nếu không nhìn thấy đánh máy của tôi trong vỏ nó làm cho việc thử nghiệm và phát triển dự án của tôi ít thú vị hơn nhiều.

Trả lời

-1

Đây thực sự là một câu hỏi Java API, mặc dù ở Scala. BufferedReader.readLine() sẽ tiêu thụ tất cả các ký tự bạn gõ từ System.in cho đến khi nó có toàn bộ dòng, tại thời điểm đó nó sẽ trả về dòng như bạn đã nói.

Đầu vào của bàn điều khiển rất khó trong Java với các lớp java.io gốc. Trước Java6, tôi đã nhìn thấy một vài giải pháp lộn xộn cho điều này, nhưng may mắn thay một lớp mới đã được giới thiệu với bản phát hành đó để làm cho nó dễ dàng hơn nhiều: java.io.Console. Tôi nghĩ rằng nó sau đó trở nên đơn giản như

val line = System.console.readLine 

println(line) 
+1

Tôi nhận được ngoại lệ con trỏ null khi tôi thử chạy mã của bạn từ bên trong sbt. Cụ thể, 'console' là null. – dsg

Các vấn đề liên quan