分享

命令行运行Java

 楚国馆 2012-09-20

  很久没在命令行运行Java了,今天突然要运行一个觉得是在是生疏,虽然之前已有同样的经过,可惜没记录下来,吃一堑长一智,这次必须得记录下来了。

 

   我首先遇到的第一个问题是编码问题,因为我是在eclipse上写好的一个测试类ApacheStatusStatistic.java,并且能在eclipse上能正确运行。但是当我把这个文件拷贝文件 E:\test目录下,并在命令行执行时,其报“需要为 class,interface或enum....”错误,详情如下:

经多翻查找,终于知道其为编码问题,原来在ecplise环境中的编码是UTF-8,改为ANSI就解决了。

  遇到的第二个问题是编译运行的问题。我的类如下:

Java代码 复制代码 收藏代码
  1. package apache;   
  2.   
  3. import java.io.BufferedReader;   
  4. import java.io.IOException;   
  5. import java.io.InputStreamReader;   
  6. import java.net.MalformedURLException;   
  7. import java.util.HashMap;   
  8. import java.util.Map;   
  9.   
  10. public class ApacheStatusStatistic {   
  11.   
  12.     /**  
  13.      * @param args  
  14.      */  
  15.     public static void main(String[] args) {   
  16.         try {   
  17.             java.net.URL url = new java.net.URL("http://www./server-status?auto");   
  18.             BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));   
  19.                
  20.             String open = "Open";   
  21.             String waiting = "Waiting";   
  22.             String readingRequest = "Reading request";   
  23.             String sendingReply = "Sending reply";   
  24.             String keepingAlive = "Keeping alive";   
  25.             String dnsLookup = "DNS lookup";   
  26.             String logging = "Logging";   
  27.             // 额外的   
  28.             String startingUp = "Starting up";   
  29.             String closingConnection = "Closing connection";   
  30.             String gracefullyFinishing = "Gracefully finishing";   
  31.             String idleCleanupofWorker = "Idle cleanup of worker";   
  32.   
  33.             Map<String, Integer> data = new HashMap<String, Integer>();   
  34.             data.put(open, 0);   
  35.             data.put(waiting, 0);   
  36.             data.put(readingRequest, 0);   
  37.             data.put(sendingReply, 0);   
  38.             data.put(keepingAlive, 0);   
  39.             data.put(dnsLookup, 0);   
  40.             data.put(logging, 0);   
  41.             // 额外的   
  42.             data.put(startingUp, 0);   
  43.             data.put(closingConnection, 0);   
  44.             data.put(gracefullyFinishing, 0);   
  45.             data.put(idleCleanupofWorker, 0);   
  46.   
  47.             String str;   
  48.             System.out.println("基本统计数据如下:");   
  49.             while ((str = in.readLine()) != null) {   
  50.                 if (str.startsWith("Scoreboard:")) {   
  51.                     String scoreboard = str.substring(11);   
  52.                     // System.out.println(scoreboard);   
  53.                     for (int i = 0; i < scoreboard.length(); i++) {   
  54.                         char c = scoreboard.charAt(i);   
  55.                         switch (c) {   
  56.                         case '_':   
  57.                             data.put(waiting, data.get(waiting) + 1);   
  58.                             break;   
  59.                         case 'S':   
  60.                             data.put(startingUp, data.get(startingUp) + 1);   
  61.                             break;   
  62.                         case 'R':   
  63.                             data.put(readingRequest, data.get(readingRequest) + 1);   
  64.                             break;   
  65.                         case 'W':   
  66.                             data.put(sendingReply, data.get(sendingReply) + 1);   
  67.                             break;   
  68.                         case 'K':   
  69.                             data.put(keepingAlive, data.get(keepingAlive) + 1);   
  70.                             break;   
  71.                         case 'D':   
  72.                             data.put(dnsLookup, data.get(dnsLookup) + 1);   
  73.                             break;   
  74.                         case 'C':   
  75.                             data.put(closingConnection, data.get(closingConnection) + 1);   
  76.                             break;   
  77.                         case 'L':   
  78.                             data.put(logging, data.get(logging) + 1);   
  79.                             break;   
  80.                         case 'G':   
  81.                             data.put(gracefullyFinishing, data.get(gracefullyFinishing) + 1);   
  82.                             break;   
  83.                         case 'I':   
  84.                             data.put(idleCleanupofWorker, data.get(idleCleanupofWorker) + 1);   
  85.                             break;   
  86.                         /** Open slot with no current process */  
  87.                         case '.':   
  88.                             data.put(open, data.get(open) + 1);   
  89.                             break;   
  90.                         }   
  91.                     }   
  92.                 } else {   
  93.                     System.out.println(str);   
  94.                 }   
  95.             }   
  96.                
  97.             System.out.println("状态统计数据如下:");   
  98.             System.out.println(open + ":" + data.get(open));   
  99.             System.out.println(waiting + ":" + data.get(waiting));   
  100.             System.out.println(readingRequest + ":" + data.get(readingRequest));   
  101.             System.out.println(sendingReply + ":" + data.get(sendingReply));   
  102.             System.out.println(keepingAlive + ":" + data.get(keepingAlive));   
  103.             System.out.println(dnsLookup + ":" + data.get(dnsLookup));   
  104.             System.out.println(logging + ":" + data.get(logging));   
  105.             /** 额外的*/  
  106.             System.out.println(startingUp + ":" + data.get(startingUp));   
  107.             System.out.println(closingConnection + ":" + data.get(closingConnection));   
  108.             System.out.println(gracefullyFinishing + ":" + data.get(gracefullyFinishing));   
  109.             System.out.println(idleCleanupofWorker + ":" + data.get(idleCleanupofWorker));   
  110.                
  111.             in.close();   
  112.         } catch (MalformedURLException e) {   
  113.         } catch (IOException ee) {   
  114.         }   
  115.     }   
  116. }  

   我编译并运行,但结果却是“no class def found error”,详情如下:

 后来经过调查时,运行编译好的文件时,必须进入其所在的目录如下图所示:

 

但我运行时却报:Exception in thread "main" java.lang.NoClassDefFoundError: ApacheStatusStatistic (wrong name: apache/ApacheStatusStatistic),详情如下:

经过调查因为包的问题,如果Java类有包名,你必须建相应的包文件夹并把文件编译或拷贝到到相应的文件夹下,如这里

我得在E:\test下创建文件夹apache并把ApacheStatusStatistic.class拷贝到这个文件夹下。并且必须在命令行指定包名,执行如下才成功运行:

终于搞定,铭刻于心呀
—— 摘自,iteye(拓梦人)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多