【问题标题】:Unable to load main class when compiling and running a java file using C++使用 C++ 编译和运行 java 文件时无法加载主类
【发布时间】:2019-08-18 00:56:51
【问题描述】:

我一直在尝试从 C++ 编译和执行一个 java 文件,但我目前遇到了这个错误。在 java 中单独执行时,java 文件可以正常工作。

这是收到的错误代码:

Error: Could not find or load main class TwitterDataCrawler
Caused by: java.lang.ClassNotFoundException: TwitterDataCrawler

在我的 C++ 文件中:

(TwitterDataCrawler.java 是我希望运行的文件 \twitter4j-core-4.0.7.jar 是运行所需的 twitter API)

int main()
{
    system("javac -cp twitter4j-core-4.0.7.jar TwitterDataCrawler.java");
    system("java -cp TwitterDataCrawler.java TwitterDataCrawler arg1");
    return 0;
}

我的 java 文件的结构如下所示:

public class TwitterDataCrawler {
    public TwitterDataCrawler() {
    }   
    public static void viewAccident(int x) throws TwitterException, IOException{
    }
    public static void main(String[] args) throws TwitterException, IOException {
            viewAccident(5000);
    }
}

我必须从 TwitterDataCrawler 类中调用 public static void main 函数。我假设由于该类确实包含一个 main 函数,因此使用参数定位该类应该可以工作。有人能指出我正确的方向吗?

【问题讨论】:

  • 你到底为什么要用 C++ 做这个??你应该在自动化之前了解java命令行的基础知识(提示:你正在一个名为“TwitterDataCrawler.java”的目录中搜索你的编译类
  • 这似乎不是调用system 的问题,而是您传递给它的参数的问题。如果您在命令行上手动键入这些命令,这些命令是否有效?
  • 我明白你的意思。 @GyroGearless 将代码更改为:system("java -cp TwitterDataCrawler");给我这个消息:imgur.com/a/wNwcolI 我还缺少什么吗?是的,这是我第一次接触 java 命令行,我应该在开始之前先阅读它。
  • 然后继续检查如何从命令行编译 java 代码,您更新的命令尝试在没有主类的情况下调用 java,只是将类路径设置为名为“TwitterDataCrawler”的无效文件。除此之外,我和 Gyro 在一起:你为什么要使用 C++ 来调用 java?如果您只想要一个简单的程序来为您自动执行此过程,您可以将 shell 命令添加到 bash 或批处理文件中并运行它。

标签: java c++ api twitter twitter4j


【解决方案1】:

解决了!

system(javac -cp twitter4j-core-4.0.7.jar TwitterDataCrawler.java);
system(java -cp .;twitter4j-core-4.0.7.jar TwitterDataCrawler);

由于使用 javac 创建的类依赖于 jar API(两者都位于同一目录中),因此包含“.;twitter4j-core-4.0.7.jar”以执行 TwitterDataCrawler。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 2017-04-30
    • 1970-01-01
    • 2016-03-05
    • 2018-01-12
    • 2020-02-18
    • 2012-04-12
    • 2017-07-30
    相关资源
    最近更新 更多