请在运行程序时帮助获取java.lang.nullpointerexception

时间:2013-08-28 17:54:42

标签: java windows cmd

帮我解决这段代码,我得到运行时异常错误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);
}
}
}

3 个答案:

答案 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?"))
         ...

变量inull,但您尝试取消引用它。执行

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

的Java 7中
    switch (line) {
        case "foo":
            // do foo
            break;
        case "bar":
            // do foo
            break;
        //...
        default: 
            // } else {
            break;
    }

或以花哨的面向对象的风格:http://ideone.com/d6pf7T