myeclipse工程裏可以運行,但cmd 運行jar包報錯

因項目需求,需要把工程打成jar包,但是出現了在MyEclipse工程裏運行沒問題,通過cmd調用運行就出問題的現象,報錯是報空指針,調用jar包不在的問題。網上查閱了好多資料,在下面兩個網頁中找到了原因。

問題1:文件流,亂碼問題

有一些文件流只能在工程裏讀寫沒問題,但是打到jar包就有問題了,可能會導致亂碼,這裏 給出了一些標準的文件讀寫操作。

轉載自:http://www.cnblogs.com/manongxiaojiang/archive/2012/10/13/2722068.html

java讀取txt文件內容。可以作如下理解:

  1. 首先獲得一個文件句柄。File file = new File(); file即爲文件句柄。兩人之間連通電話網絡了。接下來可以開始打電話了。

  2. 通過這條線路讀取甲方的信息:new FileInputStream(file) 目前這個信息已經讀進來內存當中了。接下來需要解讀成乙方可以理解的東西

  3. 既然你使用了FileInputStream()。那麼對應的需要使用InputStreamReader()這個方法進行解讀剛纔裝進來內存當中的數據

  4. 解讀完成後要輸出呀。那當然要轉換成IO可以識別的數據呀。那就需要調用字節碼讀取的方法BufferedReader()。同時使用bufferedReader()的readline()方法讀取txt文件中的每一行數據哈。

package com.campu;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.Reader;
/**
* @author 碼農小江
* H20121012.java
* 2012-10-12下午11:40:21
*/
public class H20121012 {
    /**
     * 功能:Java讀取txt文件的內容
     * 步驟:1:先獲得文件句柄
     * 2:獲得文件句柄當做是輸入一個字節碼流,需要對這個輸入流進行讀取
     * 3:讀取到輸入流後,需要讀取生成字節流
     * 4:一行一行的輸出。readline()。
     * 備註:需要考慮的是異常情況
     * @param filePath
     */
    public static void readTxtFile(String filePath){
        try {
                String encoding="GBK";
                File file=new File(filePath);
                if(file.isFile() && file.exists()){ //判斷文件是否存在
                    InputStreamReader read = new InputStreamReader(
                    new FileInputStream(file),encoding);//考慮到編碼格式
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTxt = null;
                    while((lineTxt = bufferedReader.readLine()) != null){
                        System.out.println(lineTxt);
                    }
                    read.close();
        }else{
            System.out.println("找不到指定的文件");
        }
        } catch (Exception e) {
            System.out.println("讀取文件內容出錯");
            e.printStackTrace();
        }
   
    }
   
    public static void main(String argv[]){
        String filePath = "L:\\Apache\\htdocs\\res\\20121012.txt";
//      "res/";
        readTxtFile(filePath);
    }
   
   
}

 

 

問題2:找不到第三方jar包

轉載自:http://blog.csdn.net/hhb200766/article/details/8841014

將java工程打成jar包,但第三方jar包並沒有包含在包中,當在命令行中運行jar包時,出現類找不到的異常,

在網上看到解決辦法是將第三方jar包放到JDK的擴展類文件夾中(%JAVA_HOME%/jre/lib/ext),

再運行,還是出現同樣的錯誤,我的java工程要調用webservice,webservice工程中也用到了相同的jar包,

在啓動服務器的時候,不能正確部署webservice,應該是webservice工程中的jar包和JDK中的jar包有了衝突。

通過不斷地試驗,終於成功了!

1、新建文件夾test位於D盤;

2、將用到的所有第三方jar包放在文件夾lib下,再將lib放在test下;

3、導出的java工程jar包a.jar也放在test下;

4、修改工程jar包META-INF文件夾下的MANIFEST.MF配置文件:

     Manifest-Version: 1.0
     Main-Class: cn.golaxy.yqpt.client.main.GatherMain
     Class-Path: lib/soapmonitor-1.5.jar
       lib/spring-aop.jar

     寫明main函數的包路徑(注意:冒號後加一個空格)!

     在class-path後寫上引用到的所有jar包(注意:要分行寫,並不是說一行寫一個jar包,只要保證這一行不要太長就好,否則會出現Exception in thread "main" java.io.IOException: line too long
        at java.util.jar.Attributes.read(Attributes.java:356)
        at java.util.jar.Manifest.read(Manifest.java:167)
        at java.util.jar.Manifest.<init>(Manifest.java:52)
        at java.util.jar.JarFile.getManifest(JarFile.java:158)

異常,換行時前面加兩個空格,最後還有一個回車)!

5、將修改好的MANIFEST.MF文件覆蓋掉原來的;

6、在命令行下執行jar包:java -jar a.jar。

夠詳細的了吧,希望能幫到你O(∩_∩)O哈哈~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章