[英]Cannot compile all classes separately in the same package
我有“客戶端-服務器”程序,它有 3 個類和 1 個接口。 ( 相同的代碼,但另一個問題)
添加ServerIntf.java
import java.rmi.Remote;
import java.rmi.RemoteException;
interface AddServerIntf extends Remote {
double add(double d1, double d2) throws RemoteException;
}
添加ServerImpl.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;
}
}
添加服務器.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);
}
}
}
添加客戶端.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 中,我的結構如下:
如果我嘗試使用javac
編譯每個.java
文件,則會出現錯誤:
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
結果是:
似乎只編譯了接口,但為什么呢? 我可以將所有這些類編譯為一個。 (如果將代碼放在一個文件 .java 中然后編譯)。
或者我可以同時編譯所有文件:
D:\eclipse-workspace\Shildt\folder\demo>cd..
D:\eclipse-workspace\Shildt\folder>javac demo\*.java
D:\eclipse-workspace\Shildt\folder>
在這種情況下,一切都很好。
但我無法正確理解,為什么編譯器沒有單獨找到類。 請給我解釋一下。 我很感激任何幫助。
1) 不需要逐類編譯。
事實上,您沒有在正確的工作目錄中執行命令。
您不應從demo
包中執行javac
,而應在包含它的父目錄中執行。
應該沒問題:
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
不編譯出於同樣的原因:你執行來自demo
包的javac
,所以這意味着默認情況下只會在類路徑中添加demo目錄的內容。 您需要的默認類路徑是包含演示目錄的類路徑。
所以相同的建議:編譯你的類:
D:\eclipse-workspace\Shildt\folder
而不是來自:
D:\eclipse-workspace\Shildt\folder\demo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.