RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Eclipse>列表

java Exception in thread "main" java.lang.NoSuchMethodError

来源: 作者: 时间:2007-08-08 点击:
前言:  
          由于这两个问题新手问得较多,   且回答比较零散,   很难统一整理,   所以就直接写了一篇,   还请大家见谅.  
  正文:  
  一,   类路径   (class   path)  
          当你满怀着希望安装好了java,   然后兴冲冲地写了个hello world,然后编译,  
  运行,   就等着那两个美好的单词出现在眼前,   可是不幸的是,   只看到了   Can't   find  
  class   HelloWorld   或者   Exception   in   thread   "main"   java.lang.NoSuchMethodError :   main.  
  为什么呢?   编译好的 class 明明在呀.  
          我们一起来看一看  java   程序的运行过程.   我们已经知道   java   是通过   java  
  虚拟机来解释运行的,   也就是通过   java   命令,   javac   编译生成的   .class  
  文件就是虚拟机要执行的代码,   称之为字节码(bytecode),   虚拟机通过   classloader  
  来装载这些字节码,   也就是通常意义上的类.   这里就有一个问题,   classloader   从  
  哪里知道   java   本身的类库及用户自己的类在什么地方呢?   或者有着缺省值(当前路径)  
  .  
  或者要有一个用户指定的变量来表明,   这个变量就是类路径(classpath),   或者在运行  
  的时候传参数给虚拟机.   这也就是指明   classpath   的三个方法.   编译的过程和运行  
  的过程大同小异,   只是一个是找出来编译,   另一个是找出来装载.  
          实际上   java   虚拟机是由   java   luncher   初始化的,   也就是   java   (或   java.exe)  
  这个程序来做的.   虚拟机按以下顺序搜索并装载所有需要的类:  
          1,   引导类:   组成   java 平台的类,   包含   rt.jar   和   i18n.jar   中的类.  
          2,   扩展类:   使用   java   扩展机制的类,   都是位于扩展目录($JAVA_HOME/jre/lib/e  
  xt)     中的   .jar   档案包.  
          3,   用户类:   开发者定义的类或者没有使用   java   扩展机制的第三方产品.   你必须在  
   
  命令行中使用   -classpath   选项或者使用   CLASSPATH   环境变量来确定这些类的位置.   我  
   
  们在上面所说的用户自己的类就是特指这些类.  
          这样,   一般来说,   用户只需指定用户类的位置,   引导类和扩展类是"自动"寻找的.  
          那么到底该怎么做呢?   用户类路径就是一些包含类文件的目录,   .jar,   .zip   文件的  
   
  列表,   至于类具体怎么找,   因为牵扯到   package   的问题,   下面将会说到,   暂时可认为  
  只要包含了这个类就算找到了这个类.   根据平台的不同分隔符略有不同,   类   unix   的系  
   
  统基本上都是   ":",   windows   多是   ";".   其可能的来源是:  
          *   ".",   即当前目录,   这个是缺省值.  
          *   CLASSPATH   环境变量,   一旦设置,   将缺省值覆盖.  
          *   命令行参数   -cp   或者   -classpath,   一旦指定,   将上两者覆盖.  
          *   由   -jar   参数指定的   .jar   档案包,   就把所有其他的值覆盖,   所有的类都来自这  
  个指 定的档案包中.   由于生成可执行的   .jar   文件,   还需要其他一些知识,   比如   package,    
  还有特定的配置文件,   本文的最后会提到.   可先看看   jdk   自带的一些例子.  
          我们举个   HelloWorld   的例子来说明.   先做以下假设:  
          *   当前目录是   /HelloWorld   (或   c:\HelloWorld,   以后都使用前一个)  
          *   jdk   版本为   1.2.2   (linux   下的)  
          *   PATH   环境变量设置正确.   (这样可以在任何目录下都可以使用工具)  
          *   文件是   HelloWorld.java,   内容是:  
          public   class   HelloWorld  
          {  
                  public   static   void   main(String[]   args)  
                  {  
                          System.out.println("Hello   World!\n");  
                          System.exit(0);  
                  }  
          }  
          首先这个文件一定要写对,   如果对   c   熟悉的话,   很有可能写成这样:  
          public   static   void   main(int   argc,   String[]   argv)  
          {  
                  ....  
          }  
          这样是不对的,   不信可以试一试.   由于手头没有   java   的规范,   所以  
  作如下猜想:   java   的   application   程序,   必须以   public   static   void   main(String[  ])  
  开始,   其他不一样的都不行.  
          到现在为止,   我们设置方面只设置了   PATH.  
          1,   当前路径就是指你的   .class   文件在当前目录下,  
                [HelloWorld]$   javac   HelloWorld.java     //这一步不会有多大问题,  
                [HelloWorld]$   java   HelloWorld                 //   这一步可能就会有问题.  
          如果出了象开头那样的问题,   首先确定不是由于敲错命令而出错.   如果没有敲错命  
  令,  
  那么接着做:  

共5页: 上一页 1 [2] [3] [4] [5] 下一页
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章