【问题标题】:Issue with Py4j tutorialPy4j 教程的问题
【发布时间】:2019-09-24 20:09:27
【问题描述】:

请注意,我以前没有任何 Java 经验。我对以下 Py4j 教程有疑问:https://www.py4j.org/getting_started.html

我在 Anaconda 环境中安装了 Py4j。我在 Ubuntu 工作。我将类路径设置为包含 Py4j 的 .jar 文件。当我尝试在上述网页上编译示例代码时,我收到一条错误消息,提示 Stack 符号不存在。我尝试添加一行代码来导入它,但这也无济于事(参见图片)。

Error and Directory Structure (image)

Source code:

堆栈.java

package py4j.examples;

import java.util.LinkedList;
import java.util.List;

public class Stack {
    private List<String> internalList = new LinkedList<String>();

    public void push(String element) {
        internalList.add(0, element);
    }

    public String pop() {
        return internalList.remove(0);
    }

    public List<String> getInternalList() {
        return internalList;
    }

    public void pushAll(List<String> elements) {
        for (String element : elements) {
            this.push(element);
        }
    }
}

StackEntryPoint.java

package py4j.examples;

import py4j.GatewayServer;
import py4j.examples.Stack; // <-- I added this line but it does not solve the issue

public class StackEntryPoint {

    private Stack stack;

    public StackEntryPoint() {
        stack = new Stack();
        stack.push("Initial Item");
    }

    public Stack getStack() {
        return stack;
    }

    public static void main(String[] args) {
        GatewayServer gatewayServer = new GatewayServer(new StackEntryPoint());
        gatewayServer.start();
        System.out.println("Gateway Server Started");
    }

}

我以前没有使用过Java,所以我对如何在编译期间链接类感到困惑。我已经尝试广泛查看在线 Java 文档/资源和相关问题,但似乎无法解决这个问题。有人可以指出我做错了什么吗?

谢谢。

【问题讨论】:

  • 请将您的源代码以文本形式发布!
  • @csabinho 刚刚也将源代码添加为文本。很抱歉!
  • 您需要指定包含所有必需源文件的类路径。例如javac -cp ".:/path/to/pyjar" path/to/stackentry.java
  • 是的,我已经在类路径中设置了我的 jar 文件,方法是:export Classpath=/path/to/py4j.jar 你可以在我上面链接的第一张图片中看到实际路径

标签: java python py4j


【解决方案1】:

你正在编译类StackEntryPoint,但你还没有编译Stack类。先这样做,否则无法使用它来编译StackEntryPoint

通常您的 IDE 会为您解决这个问题,但您在这里有一个特殊的设置(使用 Python 集成),所以我不确定您将如何集成它。

理想情况下,您将使用传统的 Java 工具(例如 Maven 和 IntelliJ IDEA)将您的 Java 库构建为一个单独的 JAR,但首先学习基本操作并不是一个糟糕的练习。

【讨论】:

  • 我已经尝试在StackEntryPoint 之前编译Stack,但仍然得到同样的错误。我还尝试使用javac Stack.java StackEntryPoint.java 同时编译它们,但是当我尝试运行StackEntryPoint.class 时,它说找不到或加载主类。
  • 您需要确保您编译的Stack 类所在的文件夹也在您的类路径中。如果我没记错的话,这可能就像将:. 附加到您的类路径一样简单。
猜你喜欢
  • 2015-11-16
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
相关资源
最近更新 更多