1

我从这个项目https://github.com/timmolter/XChange下载了 jar 文件,现在我正在尝试在 Eclipse 中运行一个示例程序。

运行前没有指示错误,但是在尝试运行它时,我收到以下错误消息。

Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at com.xeiam.xchange.ExchangeFactory.<init>(ExchangeFactory.java:41)
    at com.xeiam.xchange.ExchangeFactory.<clinit>(ExchangeFactory.java:39)
    at com.xeiam.xchange.rhbotha.bot.Main.main(Main.java:18)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader$1.run(Unknown Source)
    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)
    ... 3 more

这是我的代码。

package com.xeiam.xchange.rhbotha.bot;

import com.xeiam.xchange.Exchange;
import com.xeiam.xchange.ExchangeFactory;
import com.xeiam.xchange.currency.Currencies;
import com.xeiam.xchange.dto.marketdata.Ticker;
import com.xeiam.xchange.mtgox.v1.MtGoxExchange;
import com.xeiam.xchange.service.marketdata.polling.PollingMarketDataService;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {

        // Use the factory to get the version 1 MtGox exchange API using default settings
        Exchange mtGoxExchange = ExchangeFactory.INSTANCE.createExchange(MtGoxExchange.class.getName());

        // Interested in the public polling market data feed (no authentication)
        PollingMarketDataService marketDataService = mtGoxExchange.getPollingMarketDataService();

        // Get the latest ticker data showing BTC to USD
        Ticker ticker = marketDataService.getTicker(Currencies.BTC, Currencies.USD);
        System.out.println(ticker.toString());

        // Get the latest ticker data showing BTC to EUR
        ticker = marketDataService.getTicker(Currencies.BTC, Currencies.EUR);
        System.out.println(ticker.toString());

        // Get the latest ticker data showing BTC to GBP
        ticker = marketDataService.getTicker(Currencies.BTC, Currencies.GBP);
        System.out.println(ticker.toString());

    }

}

根据我的阅读,这可能是类路径中的问题,但不确定该怎么做。任何帮助,将不胜感激。

4

4 回答 4

1

您已经下载了一个 jar,其中包含您在代码中使用的类。您正在使用的类在您下载并放在 Eclipse 中的类路径中的 jar 中。在编译时,您的代码能够编译,因为您的代码所依赖的类已经编译并且可以在类路径中找到(在您添加的 jar 中),因此您不会收到任何编译错误。

问题是您下载的 jar 依赖于其他类,这些类是您未在类路径中提供的其他 jar 的一部分。当您尝试运行时,由于该类不存在,您将得到类未找到异常。就像其他人所说的那样,我建议使用 maven,以便在包含所需的依赖项时引入 jar 的所有依赖项。你也可以把所有需要的 jars 放到你的类路径中,只是有点难以管理

于 2013-04-12T12:47:52.127 回答
1

你错过了这个罐子(可能是其他罐子):org.slf4j.LoggerFactory

我的建议是使用 Maven 来管理您的依赖项(通过 pom),但如果不只是下载这个 jar 并将其与其他 jar 一起包含(即在类路径中)

于 2013-04-12T12:37:19.933 回答
1

slf4j.jar 丢失。从这里下载它并将其包含在类路径中。 http://www.slf4j.org/download.html

在 Eclipse 中,转到 Project Properties->Java Build Path->Libraries 然后添加外部 jar。

于 2013-04-12T12:45:02.087 回答
0

您的类路径中缺少 SLF4J 库。下载slf4j jar并添加到类路径(在 Eclipse 中转到 Project Properties->Java Build Path->Libraries 然后添加外部 jar。

于 2013-04-12T12:43:50.907 回答