Search code examples
javacompilationrmi

ERROR CANNOT FIND SYMBOL when compiling a Java file


I want to create a RMI application. I set the java path in the System Variables and started with these steps

  1. javac Hello.java
  2. javac HelloImpl.java
  3. javac HelloServer.java
  4. javac HelloClient.java
  5. start rmiregistry
  6. start java -Djava.security.policy=policy Server
  7. start java -Djava.security.policy=policy Client

But in the second step I have this problem

    C:\Users\HP\eclipse\SimpleRMIExample\src>javac Hello.java

C:\Users\HP\eclipse\SimpleRMIExample\src>javac HelloImpl.java
HelloImpl.java:4: error: cannot find symbol
public class HelloImpl extends UnicastRemoteObject implements Hello {
                                                              ^
  symbol: class Hello
1 error

Code

//Hello.java
import java.rmi.*;

public interface Hello extends Remote {
    public String getGreeting() throws RemoteException;
}

//HelloImpl.java
import java.rmi.*;
import java.rmi.server.*;

public class HelloImpl extends UnicastRemoteObject implements Hello {
    public HelloImpl() throws RemoteException {
        // No action needed here.
    }

    public String getGreeting() throws RemoteException {
        return ("Hello there!");
    }
}

//HelloServer.java
import java.rmi.*;

public class HelloServer {
    private static final String HOST = "localhost";

    public static void main(String[] args) throws Exception {
        // Create a reference to an implementation object...
        HelloImpl temp = new HelloImpl();
        // Create the string URL holding the object's name...
        String rmiObjectName = "rmi://" + HOST + "/Hello";
        // (Could omit host name here, since 'localhost‘ would be assumed by default.)
        // 'Bind' the object reference to the name...
        Naming.rebind(rmiObjectName, temp);
        // Display a message so that we know the process has been completed...
        System.out.println("Binding complete...\n");
    }
}

//HelloClient.java
import java.rmi.*;

public class HelloClient {
    private static final String HOST = "localhost";

    public static void main(String[] args) {
        try {
            // Obtain a reference to the object from the registry and typecast it into the
            // appropriate
            // type...
            Hello greeting = (Hello) Naming.lookup("rmi://" + HOST + "/Hello");
            // Use the above reference to invoke the remote object's method...
            System.out.println("Message received: " + greeting.getGreeting());
        } catch (ConnectException conEx) {
            System.out.println("Unable to connect to server!");
            System.exit(1);
        } catch (Exception ex) {
            ex.printStackTrace();
            System.exit(1);
        }
    }
}



Solution

  • Problem finally solved here are the steps

    1. Edit the System Environment Variables -> Environment Variables -> User variables -> CLASSPATH (add if not found) -> path-project-bin-folder (C:\Users\HP\eclipse\SimpleRMIExample\bin) for 1st time only
    2. Reboot for 1st time only
    3. Clean Project
    4. Command: start rmiregistry (on bin folder of your project)
    5. Run project