Jadex中的NoClassDefFoundError

时间:2010-10-27 20:59:09

标签: java

我正在使用Jadex 0.96。我想使用V2,但我无法获得当前版本来稳定地初始化我的Mac上的JCC。

使用Jadex 0.96,我正在尝试使用opencsv:

http://opencsv.sourceforge.net/

这需要我将.jar文件添加到我的项目中。我有一些依赖于opencsv构建的类在普通Java中运行时工作正常。但是,当我尝试在Jadex计划中初始化其中一个类时,我得到以下错误(omni0是代理的名称,DataGrid是使用opencsv的类,DataMap是使用DataGrid的类):

***  Uncaught Exception for agent omni0  ***
java.lang.NoClassDefFoundError: au/com/bytecode/opencsv/CSVReader
    at gi.environment.data.DataGrid.<init>(DataGrid.java:32)
    at gi.environment.data.DataMap.<init>(DataMap.java:46)
    at gi.agents.base.capabilities.interaction.InitialPlan.body(InitialPlan.java:39)
    at jadex.runtime.JavaStandardPlanExecutor$PlanExecutionTask.run(JavaStandardPlanExecutor.java:581)
    at jadex.util.concurrent.ThreadPool$ServiceThread.run(ThreadPool.java:308)
Caused by: java.lang.ClassNotFoundException: au.com.bytecode.opencsv.CSVReader
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    ... 5 more

我非常有信心这与包含opencsv jar文件有关,但我不知道如何让Jadex识别它。在尝试初始化DataMap之前,我尝试将它添加到类路径中:

System.setProperty("java.class.path",currentPath+opencsvPath);

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我最后编写了自己的简单CSVDataReader类来取代CSVReader。它适用于我的应用程序,并避免引用jar引起的Jadex错误。

以下是有人需要的课程:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class CSVDataReader {

    private String filePath;

    public CSVDataReader(String filePath) throws IOException {
        this.filePath = filePath;
    }

    public List<String[]> readAll() throws IOException {
        // Get Buffered Reader
        FileInputStream fstream = new FileInputStream(filePath);
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));

        // Init lineList
        List<String[]> lineList = new ArrayList<String[]>();

        // Get Lines
        String strLine;
        while ((strLine = bufferedReader.readLine()) != null)   {
            String[] strings = strLine.split(",");
            lineList.add(strings);
        }
        //Close the input stream
        in.close();

        return lineList;
    }

    public static void main(String [] args){
        try {

            String filePath = "test.csv";

            CSVDataReader reader = new CSVDataReader(filePath);
            List<String[]> lineList = reader.readAll();

            for(String[] strings : lineList){
                for (String s : strings) {
                    System.out.print(s+" ");
                }
                System.out.println();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}