黑马程序员技术交流社区

标题: 关于main函数反射的一个程序问题 [打印本页]

作者: 吴亨    时间: 2012-2-8 17:45
标题: 关于main函数反射的一个程序问题
本帖最后由 吴亨 于 2012-2-9 19:49 编辑
  1. package com.baidu.exam;

  2. import java.lang.reflect.Method;

  3. class Point {
  4.         public static void main(String[]args)throws Exception
  5.         {
  6.             String name = args[0];
  7.       Method mainMethod = Class.forName(name).getMethod("main", String[].class);
  8.           mainMethod.invoke(null, (Object)new String[]{"eAWDR","rgsfe","gs"});
  9.         }
  10.        
  11.   
  12. }
  13. class Hello
  14. {
  15.     public static void main(String[]args) {
  16.             for(String str:args){
  17.                     System.out.println(str);
  18.             }
  19.        
  20.         }
  21. }
复制代码
在dos里面我用 "java  Point  com.baidu.exam.Hello"命令,老是执行出错,求指教。
作者: 最初的理想    时间: 2012-2-8 18:45
本帖最后由 最初的理想 于 2012-2-8 18:47 编辑

你能把错误提示写上么??由于你的源程序有包名 因此运行的时候该加上包名:
java com.baidu.exam.Point com.baidu.exam.Hello
运行程序没问题
附:文件目录D:\myeclipsejava2\test\src\com\baidu\exam


D:\myeclipsejava2\test\bin>java Point com.baidu.exam.Hello
Exception in thread "main" java.lang.NoClassDefFoundError: Point
Caused by: java.lang.ClassNotFoundException: Point
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Point.  Program will exit.

D:\myeclipsejava2\test\bin>java com.baidu.exam.Point com.baidu.exam.Hello
eAWDR
rgsfe
gs


作者: 梅雄新    时间: 2012-2-8 22:09
楼主 你的代码是打包的
在DOS下编译后会在源文件.java相同的路径下生成对应的.class文件
但是这个.class字节码文件的包路径应该是源文件下新建相应包名文件夹,并把生成的.class文件放到文件夹里
像楼主的代码,应该在源文件下编译完源文件后新建
com
      |--baidu
            |--exam
把生成的Point.class和Hello.class文件放在exam里  
然后在DOS源码路径下执行  java com.baidu.exam.Point com.baidu.exam.Hello 就可以运行了
另一种方法可以在执行时不加包名,楼主需要将刚才的.class文件路径加到系统环境变量中
作者: 吴亨    时间: 2012-2-9 19:49
谢谢大家




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2