编译 Java 文件时出错无法找到符号
ERROR CANNOT FIND SYMBOL when compiling a Java file
我想创建一个 RMI 应用程序。我在系统变量中设置了 java 路径,并从这些步骤开始
- javac Hello.java
- javac HelloImpl.java
- javac HelloServer.java
- javac HelloClient.java
- 启动 rmiregistry
- 启动java-Djava.security.policy=策略服务器
- 启动java-Djava.security.policy=策略客户端
但是在第二步我遇到了这个问题
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
代码
//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);
}
}
}
问题终于解决了,步骤如下
- 编辑系统环境变量 -> 环境变量 -> 用户变量
-> CLASSPATH (如果找不到则添加) -> path-project-bin-folder
(C:\Users\HP\eclipse\SimpleRMIExample\bin)
仅限第一次
- 重启
仅限第一次
- 清理项目
- 命令:启动 rmiregistry(在您项目的 bin 文件夹中)
- 运行 项目
我想创建一个 RMI 应用程序。我在系统变量中设置了 java 路径,并从这些步骤开始
- javac Hello.java
- javac HelloImpl.java
- javac HelloServer.java
- javac HelloClient.java
- 启动 rmiregistry
- 启动java-Djava.security.policy=策略服务器
- 启动java-Djava.security.policy=策略客户端
但是在第二步我遇到了这个问题
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
代码
//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);
}
}
}
问题终于解决了,步骤如下
- 编辑系统环境变量 -> 环境变量 -> 用户变量 -> CLASSPATH (如果找不到则添加) -> path-project-bin-folder (C:\Users\HP\eclipse\SimpleRMIExample\bin) 仅限第一次
- 重启 仅限第一次
- 清理项目
- 命令:启动 rmiregistry(在您项目的 bin 文件夹中)
- 运行 项目