gpt4 book ai didi

java - 无法在同一个包中分别编译所有类

转载 作者:行者123 更新时间:2023-12-02 10:42:00 26 4
gpt4 key购买 nike

我有“客户端-服务器”程序,它有 3 个类和 1 个接口(interface)。 (same code but another issue)
AddServerIntf.java

import java.rmi.Remote;
import java.rmi.RemoteException;

interface AddServerIntf extends Remote {
double add(double d1, double d2) throws RemoteException;
}
AddServerImpl.java
import java.rmi.*;
import java.rmi.server.*;

public class AddServerImpl extends UnicastRemoteObject implements AddServerIntf {

public AddServerImpl() throws RemoteException {
}

public double add(double d1, double d2) throws RemoteException {
return d1 + d2;
}
}
AddServer.java
import java.rmi.*;

public class AddServer {
public static void main(String args[]) {
try {
AddServerImpl addServerImpl = new AddServerImpl();
Naming.rebind("AddServer", addServerImpl);
} catch (Exception e) {
System.out.println("Exception: " + e);
}
}
}
AddClient.java
import java.rmi.*;

public class AddClient {
public static void main(String args[]) {
try {
String addServerURL = "rmi://" + args[0] + "/AddServer";
AddServerIntf addServerIntf = (AddServerIntf) Naming.lookup(addServerURL);
System.out.println("The first number is: " + args[1]);
double d1 = Double.valueOf(args[1]).doubleValue();
System.out.println("The second number is: " + args[2]);

double d2 = Double.valueOf(args[2]).doubleValue();
System.out.println("The sum is: " + addServerIntf.add(d1, d2));
} catch (Exception e) {
System.out.println("Exception: " + e);
}
}
}
在 Eclipse 中,我的结构如下:
enter image description here
enter image description here
如果我试图编译每个 .java文件使用 javac然后得到错误:
    D:\eclipse-workspace\Shildt\folder\demo>javac AddServerIntf.java

D:\eclipse-workspace\Shildt\folder\demo>javac AddServerImpl.java
AddServerImpl.java:6: error: cannot find symbol
public class AddServerImpl extends UnicastRemoteObject implements AddServerIntf {
^
symbol: class AddServerIntf
1 error

D:\eclipse-workspace\Shildt\folder\demo>javac AddServer.java
AddServer.java:9: error: cannot find symbol
AddServerImpl addServerImpl = new AddServerImpl();
^
symbol: class AddServerImpl
location: class AddServer
AddServer.java:9: error: cannot find symbol
AddServerImpl addServerImpl = new AddServerImpl();
^
symbol: class AddServerImpl
location: class AddServer
2 errors

D:\eclipse-workspace\Shildt\folder\demo>javac AddClient.java
AddClient.java:9: error: cannot find symbol
AddServerIntf addServerIntf = (AddServerIntf) Naming.lookup(Url);
^
symbol: class AddServerIntf
location: class AddClient
AddClient.java:9: error: cannot find symbol
AddServerIntf addServerIntf = (AddServerIntf) Naming.lookup(Url);
^
symbol: class AddServerIntf
location: class AddClient
2 errors
结果是:
enter image description here
似乎只编译了界面,但为什么呢?我可以将所有这些类编译为一个。 (如果将代码放在一个文件 .java 中然后编译)。
或者我可以编译 all the files at the same time :
D:\eclipse-workspace\Shildt\folder\demo>cd..

D:\eclipse-workspace\Shildt\folder>javac demo\*.java

D:\eclipse-workspace\Shildt\folder>
在这种情况下,一切都很好。
enter image description here
但我无法正确理解,为什么编译器没有单独找到类。请给我解释一下。我很感激任何帮助。

最佳答案

1) 不需要逐类编译。
实际上,您没有在正确的工作目录中执行命令。
你不应该执行javac来自 demo包,而是在包含它的父目录中。
应该没问题:
D:\eclipse-workspace\Shildt\folder\javac demo\*.java应该没事

2) 当你用 javac 编译时(甚至在执行java 命令时),您必须注意默认情况下是执行命令的当前目录的类路径值。

所以这个D:\eclipse-workspace\Shildt\folder\demo>javac AddServerIntf.java编译
但是 D:\eclipse-workspace\Shildt\folder\demo>javac AddServerImpl.java由于同样的原因不能编译:你执行 javac来自 demo包,所以这意味着默认情况下只会在classpath中添加demo目录的内容。您需要的默认类路径是包含演示目录的类路径。
所以同样的建议:编译你的类:

D:\eclipse-workspace\Shildt\folder

而不是来自:
D:\eclipse-workspace\Shildt\folder\demo

关于java - 无法在同一个包中分别编译所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51674437/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com