簡體   English   中英

無法在同一個包中單獨編譯所有類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM