Java17如何运行这段JAVA8的代码?

问题描述:
今天遇到了一段代码java8执行没问题,但是把jdk切换成17时出现了包找不到的问题,推测与Java的模块化有关,但是尝试了许久并未解决。

Java8代码:

import com.sun.jndi.rmi.registry.ReferenceWrapper;

import javax.naming.NamingException;
import javax.naming.Reference;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;


public class RMIServer {
    public static void main(String[] args) {
        try {
            // 本地主机上的远程对象注册表Registry的实例,默认端口1099
            LocateRegistry.createRegistry(1099);
            Registry registry = LocateRegistry.getRegistry();
            System.out.println("Create RMI registry on port 1099");
            //返回的Java对象
            Reference reference = new Reference("EvilCode","EvilCode",null);
            ReferenceWrapper referenceWrapper = new ReferenceWrapper(reference);
            // 把远程对象注册到RMI注册服务器上,并命名为evil
            registry.bind("evil",referenceWrapper);
        } catch (RemoteException | AlreadyBoundException | NamingException e) {
            e.printStackTrace();
        }
    }
}
阅读 5.8k
1 个回答

jdk9开始分模块了,模块中内容如果要用,需要配置module-info.java。

但也可以通过--add-modules和--add-exports来解决。
image.png

--add-modules
java.naming,java.rmi,jdk.naming.rmi
--add-exports
jdk.naming.rmi/com.sun.jndi.rmi.registry=ALL-UNNAMED

image.png

第一个图配置是为了能编译,第二个图添加jvm选项是为了运行时能用这几个类。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
1 篇内容引用
推荐问题