帮我解决这段代码,我得到运行时异常错误java.lang.nullpointerexception plz帮我解决这个问题以及如何使用java程序访问桌面上的任何文件, 就像我想访问桌面或任何其他folde中的任何图像或文本文件我应该写什么代码.FYI我是菜鸟。
import java.io.*;
class jarvis
{
public static void main(String args[])
{
String i=null,j=null,k=null,l=null,m=null,n=null,o=null,a=null,q=null;
try
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Command me: ");
if(i.equals("jarvis you there?"))
{
i=br.readLine();
System.out.println("at your service sir");
}
System.out.println("Command me: ");
if(j.equals("run command prompt"))
{
j=br.readLine();
Runtime r=Runtime.getRuntime();
Process p=r.exec("cmd.exe /c start");
}
System.out.println("Command me: ");
if(k.equals("run notepad"))
{
k=br.readLine();
Runtime r=Runtime.getRuntime();
Process p=r.exec("notepd.exe");
}
System.out.println("Command me: ");
if(l.equals("run paint"))
{
l=br.readLine();
Runtime r=Runtime.getRuntime();
Process p=r.exec("mspaint.exe");
}
System.out.println("Command me: ");
if(m.equals("open facebook"))
{
m=br.readLine();
Runtime r=Runtime.getRuntime();
Process p=r.exec("cmd.exe /c start www.facebook.com");
}
System.out.println("Command me: ");
if(n.equals("open google"))
{
n=br.readLine();
Runtime r=Runtime.getRuntime();
Process p=r.exec("cmd.exe /c start www.google.com");
}
System.out.println("Command me: ");
if(o.equals("open youtube"))
{
o=br.readLine();
Runtime r=Runtime.getRuntime();
Process p=r.exec("cmd.exe /c start www.youtube.com");
}
System.out.println("Command me: ");
if(a.equals("open yahoo"))
{
a=br.readLine();
Runtime r=Runtime.getRuntime();
Process p=r.exec("cmd.exe /c start www.yahoo.com");
}
System.out.println("Command me: ");
if(q.equals("open omegle"))
{
q=br.readLine();
Runtime r=Runtime.getRuntime();
Process p=r.exec("cmd.exe /c start www.omegle.com");
}
}
catch(Exception e)
{
System.out.print(e);
}
}
}
答案 0 :(得分:2)
String i=null,j=null,k=null,l=null,m=null,n=null,o=null,a=null,q=null;
try
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Command me: ");
if(i.equals("jarvis you there?"))
...
变量i
是null
,但您尝试取消引用它。执行
i=br.readLine();
在比较其价值之前。
答案 1 :(得分:0)
您正在比较i
而未初始化
String i=null
if(i.equals("jarvis you there?"))
^^^^
Here there is NPE
你唯一能做的就是在等于左侧的常数
if("jarvis you there?".equals(i))
{
...
答案 2 :(得分:0)
代码按您编写的顺序执行。如果您想将用户输入与if
内的某些值进行比较,则必须在比较它之前阅读它:
System.out.println("Command me: ");
i = br.readLine();
if(i.equals("jarvis you there?"))
{
System.out.println("at your service sir");
}
由于readLine()
可以返回null,因此仍然可以提供空指针异常。防止这种情况的最简单方法是切换equals
的边。文字字符串是对象,因此它们具有equals
之类的方法,但它们不能为空。
if("jarvis you there?".equals(i))
接下来你会发现你的程序读取一行并检查它是否只是第一个命令,读取下一行并检查它是否是第二个命令,依此类推。要获得"run paint"
命令,您必须将其作为第4行输入。
您应该将同一行与每个可能的命令进行比较。例如,使用if .. else if ... else if ... else
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
for (;;) {
System.out.println("Command me: ");
String line = br.readLine();
if ("foo".equals(line)) {
// do foo
} else if ("bar".equals(line)) {
// do bar
} else if ("baz".equals(line)) {
// do baz
} else {
System.out.println("Unknown Command. Bye.");
break;
}
}
或者在带有switch
switch (line) {
case "foo":
// do foo
break;
case "bar":
// do foo
break;
//...
default:
// } else {
break;
}
或以花哨的面向对象的风格:http://ideone.com/d6pf7T