小弟写了一个需要接收参数的class,如:
class A{
public A(String para1,String para2,int para3){
....//接收参数;
}
method1(){}
public static void main(String[] args){
args=A(args[0],args[1],args[2]);
method1();
}
}
在另一个类测试,在其中的main方法中调用A.main(new String[]{para1,para2,para3});测试是可以得出结果的,但是我将A打包成jar后
在cmd中运行:
java -jar A.jar para1,para2,para3
却无法输出结果,并且报空指针异常;
各位大哥大姐路过·~给讲解下~~麻烦了~~
小弟在这里谢过先~~ 

解决方案 »

  1.   

    args=A(args[0],args[1],args[2]);
    String[] 怎么能让A符值呢。编译都过不了
      

  2.   

    我刚google一下,一看看 http://www.fh888.com/sf_C31E462FF40045D0BF88926F9FE50C38_5_yhn.html
      

  3.   

    编写manifest.mf文件如下:Main-Class: Ajar命令:jar -cvmf manifest.mf test.jar A.class执行正确
      

  4.   

    原来的程序没看明白,我编译通过的A.java如下:class A{
    public A(String para1,String para2,String para3){
    // ....//接收参数;
    System.out.println(para1 + "/" + para2 + "/" + para3) ;
    }

    public static void main(String[] args){
    new A(args[0],args[1],args[2]);
    }
    }
    执行命令:java A para1 para2 para3用jar的执行命令:java -jar test.jar para1 para2 para3输出结果:para1/para2/para3
      

  5.   


    当初只是写的示例~~下面是全部代码的补完~~我想再请教下~~如果这个类还要对传进来的参数进行处理的话·是在哪里调用方法啊?是像下面那样调用吗?
    public class A{
      private static String a,b,c,d;
      private static int n;
      public A(String str1,String str2,String str3){
        a=str1;
        b=str2;
        c=str3;
      }  public static void methord(){
        n= Integer.parseInt(c)
        d=a+"/"+b+"/"+(n*2);
        System.out.println(d);
      }  public static void main(String[] args){
        new A(args[0],args[1],args[2]);
        //是在这里调用方法吗?
         method();
      }
    }
    因为传进去的参数有数字~~所以我在方法里用了 Integer.parseInt(c),将String转成int后便于计算,
    有时候测试的时候会捕捉到格式异常。请问,这样的异常需不需要处理?
    可是在debug的时候,执行到new A(args[0],args[1],args[2])的时候,却会出现数组下标越界的异常
    而我直接打包,运行jar,则会出现空指针异常~~我也不知道这该怎么解决,麻烦路过的再指点一二;ps:开发工具我用的是netBeans 6.8,关于manifest.mf,是自动生成,我检查了下,主类配置是对的,
    整个程序就这些,一个包一个带有main方法的类。
      

  6.   

    LZ的代码中的几个小问题,先纠正后再看下是否问题仍然存在
    1,n= Integer.parseInt(c)
      末尾加个 ; 先
    2,public static void methord(){  与  main方法中调用的方法名称不一致 method另外:
       //是在这里调用方法吗?
         method();    在这里调用没错,不过建议,使用类名+方法名的方式进行调用,如:A.methord();
      

  7.   

    LZ的这段代码除了个别代码recruits所说的问题,测试通过,
    Eclipse是可以的,涉及到程序入口时传入的参数是否正确,如果不传是会报数组越界问题
      

  8.   

    public class A{
      private static String a,b,c,d;
      private static int n;
      public A(String str1,String str2,String str3){
        a=str1;
        b=str2;
        c=str3;
      }  public static void methord(){
        n= Integer.parseInt(c);
        d=a+"/"+b+"/"+(n*2);
        System.out.println(d);
      }  public static void main(String[] args){
        new A(args[0],args[1],args[2]);
        //是在这里调用方法吗?
         methord();
      }
    }
    LZ的问题:格式异常跟下标异常,都可以在new A(args[0],agrs[1],args[2])前面加上IF判断下避免掉这些异常,
    public static void main(String[] args){
       if(args.length<4){
          if(args[2].match("[0-9]+"))
            new A(args[0],args[1],args[2]);
           //是在这里调用方法吗?
            methord();   
       }
    }至于直接运行JAR空指针的话,建议楼主要直接运行JAR就不要这么写了。可以这么写:
    public static void main(String[] args){
                    InputStreamReader isr =new InputStreamReader(System.in);
    BufferedReader br=new BufferedReader(isr);
    String[] str=new String[3];
    for(int i=0;i<str.length;i++){
    try {
    String s=br.readLine();
    str[i]=s;
    if(i==2)
    while(!str[2].matches("[0-9]+")){
    str[2]=br.readLine();
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
                   new A(args[0],args[1],args[2]);
                   methord();
    }
      

  9.   

    抱歉 最后第二行拷贝快了 修改了一下
    }
      new A(str[0],str[1],str[2]);
      methord();
    }
      

  10.   


    呵呵·~这两问题都是在写帖子的时候的手误·~  最近在写fortran,所以总爱漏掉  ;  嘿嘿不过还是很感谢你啊·~让我明确了  方法调用的对的~~排除了一种错误的可能~~
      

  11.   


    可能·~~因为netbeans是直接编译源文件的,也就是说 这个时候没有给定参数
    但是,为什么我在cmd里面运行的时候,却给我报空指针异常了·~~可能是我参数有问题吧·~~java -jar A.jar 这后面参数的分隔符是不是只能用空格啊?
    还是说分号逗号都行~
      

  12.   

    java -jar a.jar  a b c d e f 
    有空隔隔开,不有逗号