Rmi:未约束的例外

时间:2013-07-14 21:35:58

标签: java

我是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");
        }
    }
}

3 个答案:

答案 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()。它可以通过拼写错误消除这种问题,就好像你弄错了它没有编译,它也解决了唯一性问题。