Py4j 教程问题

Issue with Py4j tutorial

请注意,我以前没有任何使用 Java 的经验。我在使用 Py4j 的以下教程时遇到问题:https://www.py4j.org/getting_started.html

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

Error and Directory Structure (image)

Source code:

Stack.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,所以在编译的时候对如何link类感到困惑。我已经尝试在网上广泛查看 Java documentation/resources 和相关问题,但似乎无法解决这个问题。有人可以指出我做错了什么吗?

谢谢。

您正在编译 class StackEntryPoint,但您还没有编译 Stack class。先这样做,否则不能用它来编译StackEntryPoint.

通常您的 IDE 会为您解决这个问题,但是您在此处进行了特殊设置(使用 Python 集成)所以我不确定您将如何集成它.

理想情况下,您将使用常规 Java 工具(例如 Maven 和 IntelliJ IDEA)将 Java 库构建为单独的 JAR,但这不是一个坏练习先学会简单地做。