2009-12-16 29 views
5

này:NullPointerException trong readLine Console của()

Console c = System.console(); 
     String readline; 
     String u = c.readLine("%s", "args"); 

Ném một NullPointerException. Tuy nhiên, chữ ký của phương pháp này là:

public String readLine(String fmt, Object... args) 

Tại sao của ngoại lệ này được ném?

Trả lời

17
Console c = System.console(); 

Is c null?

Doc:

public static điều khiển giao diện điều khiển()

Trả về đối tượng điều khiển độc đáo gắn liền với máy ảo Java hiện , nếu có.

Trả về: Bảng điều khiển hệ thống, nếu có, nếu không null.

+0

Đó không phải là phương pháp nhà máy? – andandandand

+0

Oh ... làm thế nào tôi có thể nhận được một đối tượng điều khiển từ Netbeans? – andandandand

+0

Tôi đã không thử sử dụng cuộc gọi này trong Netbeans, nhưng bạn có thể sử dụng gỡ lỗi từ xa trong Eclipse để có được vòng này: http://stackoverflow.com/questions/104254/java-io-console-support-in-eclipse-ide/105403 # 105403 Tôi chắc chắn rằng nó có thể làm điều gì đó tương tự trong Netbeans. – McDowell

4

NullPointerException là một RuntimeException, có nghĩa là nó không phải được khai báo trong chữ ký phương thức.

+1

Đây là câu trả lời cho câu hỏi tại sao NPE bị ném, vì chữ ký không chỉ định bất kỳ ngoại lệ nào. Khi tôi đọc câu hỏi, đó dường như là điểm nhầm lẫn chính của người hỏi. –

2

Có phải là c không?

Nhân tiện, câu lệnh readLine của bạn tương đương với c.readLine("args") - đó là những gì bạn có ý định?

1

Có điều gì đó lạ trong đoạn mã. Bạn khai báo một biến được gọi là "readline" nhưng bạn không khởi tạo nó và không sử dụng nó.

Có thể là trong chương trình bạn bằng cách nào đó sử dụng biến này w/o khởi tạo nó? (một shot dài, tôi biết)

+0

đây là mẫu giáo trình. – andandandand

2

System.console() trả về null, nó là dòng duy nhất trong đoạn mã đó có thể có thể ném một ngoại lệ con trỏ null.

4

qua: http://www.codeguru.com/forum/showthread.php?t=487190 để xem chi tiết

Trước khi sử dụng một phương pháp nó luôn luôn trả tiền để đọc các tài liệu API trên những gì phương pháp nào. Ví dụ tài liệu cho các phương pháp điều khiển() nói:

Trích:

Cho dù một máy ảo có một console là phụ thuộc vào cơ bản nền tảng và cũng theo cách trong đó máy ảo là được gọi. Nếu máy ảo là bắt đầu từ một dòng lệnh tương tác mà không chuyển hướng tiêu chuẩn đầu vào và đầu ra suối rồi console của nó sẽ tồn tại và thường sẽ được kết nối với bàn phím và màn hình mà từ đó các máy ảo đã được đưa ra. Nếu máy ảo được khởi động tự động, ví dụ bởi một công cụ lên lịch nền, sau đó nó thường sẽ không có bảng điều khiển.

Nếu máy ảo này có một giao diện điều khiển sau đó nó được đại diện bởi một tượng duy nhất của lớp học này có thể được thu được bằng cách gọi phương thức System.Console(). Nếu không có bàn điều khiển thiết bị khả dụng thì yêu cầu của phương thức đó sẽ trả về null.of phương thức đó sẽ trả về giá trị rỗng.

Nếu bạn thử gọi chương trình từ dòng lệnh bằng lệnh java thì nó sẽ có bảng điều khiển và phương thức không được trả về null.of phương thức đó sẽ trả về giá trị rỗng.

Ngoài ra, bằng cách sử dụng lớp Scanner sẽ làm việc bên trong IDE của bạn:

Scanner sc = new Scanner(System.in);

0

System.console()null trong IDE bạn đang sử dụng. Hãy thử java.util.Scanner để thay thế:

import java.util.Scanner; 
Scanner s = new Scanner(System.in); 
String u = s.nextLine(); 
Các vấn đề liên quan