我是Java RMI的新手,我遇到了Not Bound Exception的问题。我知道这里有很多帖子,但我在过去几个小时里尝试过的任何内容都没有帮助。
这是服务器和客户端的代码。任何帮助都很好,提前谢谢。
最后一件事是,当我运行Master时发现异常,当我运行服务器时没有发现错误。
站长:
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.imageio.*;
import java.util.Scanner;
import java.rmi.registry.LocateRegistry;
public class Master {
private ITaskBag1 tb;
private String name = "rmi://" + "127.0.0.1" +":"+1099+"/TaskBagServer";
private int rescount = 0,listcount=0;
private boolean finished = false;
private ArrayList<String> tasks = new ArrayList<String>();
private Random rand;
private double rkey;
public static void main(String[] args){
//pithano lathos
try {
Master m = new Master(args);
} catch (Exception exc) { }
}
Master (String[] args){
rand = new Random();
String url="";
String s1="",s2="",s3="",myLine="",key="";
File myFile=null;
File imgFile = null;
String myFileName="";
String myFileName2="";
StringTokenizer st;
BufferedReader br=null;
int numoftokens = 0;
int endframe = 0;
int degrees = 0;
int eikona = 001;
int i;
double scale = 1.0;
byte[] imageInByte = null;
imageData imdat = null;
imageResult imres = null;
Boolean registered = false;
//Register to ITaskbag
try { //try 1
//try to register
tb = (ITaskBag1) Naming.lookup(name);
}
}
}
服务器:
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.LocateRegistry;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class TaskBagServer{
public static void main(String args[]) {
final int DEFAULT_PORT = 1099;
String sport="";
int port=DEFAULT_PORT;
String connectionstring="//127.0.0.1/TaskbagServer";
//String porterror = "Invalid port specified, " + DEFAULT_PORT + " assumed";
try {
//LocateRegistry.createRegistry(1099);
// connectionstring = "//127.0.0.1:"+port+"/TaskbagServer";
java.rmi.registry.LocateRegistry.createRegistry(1099);
} catch (RemoteException ex) {
Logger.getLogger(TaskBagServer.class.getName()).log(Level.SEVERE, null, ex);
}
try {
TaskBag1 server = new TaskBag1();
Naming.rebind("connectionstring",server);
System.out.println("Taskbag Server Bound");
}
}
}
答案 0 :(得分:1)
我认为问题在于您在服务器的connectionstring
调用中引用Naming.rebind()
变量。这会将网址设置为connectionstring
,而不是您真正想要的。
答案 1 :(得分:0)
try {
TaskBag1 server = new TaskBag1();
Naming.rebind("connectionstring",server);
System.out.println("Taskbag Server Bound");
}
“connectionstring”将是重新绑定的URI ...你应该在没有“”的情况下编写它,因为你想引用一个字符串。
顺便说一下:你应该在该String中使用前缀“rmi:”。
答案 2 :(得分:0)
[删除引号后]:检查拼写。你有TaskBagServer和TaskbagServer。
我使用远程接口的类名作为绑定名称,即在这种情况下为ITaskBag1.class.getName()。它可以通过拼写错误消除这种问题,就好像你弄错了它没有编译,它也解决了唯一性问题。