对于下面的代码,编译器在使用read函数时会出现空指针异常。我希望在屏幕上显示任何用户类型。 其次read函数返回一个int,但我想显示用户输入的字符串,这会显示字符串还是这个我必须用来显示字符串的方法?
//This part is in the main method.
InputStream obj=new Task(t);
int c;
try {
while((c=obj.read())!=-1){
System.out.print(""+c);
}
//This one is another class.
class Task extends InputStream{
byte[] content;
int num=0;
public Task(JTextField t){
t.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==e.VK_ENTER){
content=t.getText().getBytes();
t.setText("");
}
super.keyPressed(e);
}
});
}
public int read(){
if(num>=content.length){
return -1;
}
else return content[num++];
}}
答案 0 :(得分:1)
content
仅在执行此块时初始化:
if(e.getKeyCode()==e.VK_ENTER){
content=t.getText().getBytes();
t.setText("");
}
要解决此问题,您可以使用read
方法添加支票:if(content == null) return -1;
编辑:
覆盖方法时,应使用@Override
指令。您当前的方法,添加了空检查,符合JavaDoc。如果要获取字符串值,则需要添加一些其他功能。
public String GetContent() {
if(content == null)
return "";
return new String(content);
}
但是,以上将取决于您打算如何使用任务。另一种选择是类似的东西:
public int read(byte[] b, int off, int len) {
if(b == null) return -1;
//Use System.Arraycopy to copy `content` within `b`.
}