NotBoundException, когда я пытаюсь соединиться с сервером RMI - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь запустить это приложение, используя клиент-сервер RMI. Во-первых, я запустил его и получил ошибку «Соединение отказано в хосте: localhost». После этого я зашел в system32 / drivers / etc / hosts и исправил его, добавив строку:

127.0.0.1 localhost

Это не привело меня к решению проблемы. Затем я посмотрел те же вопросы в stackoverflow о том, как решить эту проблему, а затем решил ее с помощью (работает в cmd):

start rmiregistry

Итак, rmiregistry запустился, и я получил новую ошибку - NotBoundException (но я мог исправить проблему «Отказ в соединении»).

servicebrowser.java:

package servicebrowser;

import java.awt.*;
import javax.swing.*;
import java.rmi.*;
import java.awt.event.*;


public class ServiceBrowser {


    JPanel mainPanel;
    JComboBox serviceList;
    ServiceServer server;

    public void buildGUI() {


        Object[] services = getServicesList();


    }


    Object[] getServicesList() {
        Object obj = null;
        Object[] services = null;

        try {

            obj = Naming.lookup("rmi://127.0.0.1/ServiceServer");

        }
        catch (Exception ex) { ex.printStackTrace(); }

        server = (ServiceServer) obj;

        try {
            services = server.getServiceList();
        }
        catch (Exception ex) { ex.printStackTrace(); }
        return services;        
    }

    class MyListListener implements ActionListener {
        public void actionPerformed(ActionEvent ev) {
            Object selection = serviceList.getSelectedItem();
            loadService(selection);           
        }        

    }



    public static void main(String[] args) {

       new ServiceBrowser().buildGUI(); 


    }

}

Класс ServiceServerImpl:

import java.rmi.*;
import java.util.*;
import java.rmi.server.*;


public class ServiceServerImpl extends UnicastRemoteObject
    implements ServiceServer {

    HashMap serviceList;

    public ServiceServerImpl() throws RemoteException {
        setUpServices();
    }

    private void setUpServices() {
        serviceList = new HashMap();

    }

    public Object[] getServiceList() {
        System.out.println("in remote");
        return serviceList.keySet().toArray();       
    }

    public Service getService(Object serviceKey) throws RemoteException {
        Service theService = (Service) serviceList.get(serviceKey);
        return theService;
    }


    public static void main (String[] args) {

        try {

            Naming.rebind("ServiceServer", new ServiceServerImpl());   

        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
        System.out.println("Remote service is running");
    }

}

Что с ним не так? Я тоже отключил брандмауэр.

1 Ответ

0 голосов
/ 04 апреля 2019

Спасибо большое!

Я решил свою проблему именно так.

Во-первых, Я редактировал классы servicebrowser, ServiceServerImpl.

класс servicebrowser:

До:

 try {

     obj = Naming.lookup("rmi://127.0.0.1/ServiceServer");

 }

Сейчас (плюс я добавил импорт java.rmi.registry.LocateRegistry, импорт java.rmi.registry.Registry в верхней частикод):

try {
    Registry registry = LocateRegistry.getRegistry("127.0.0.1", 10001);
    obj = registry.lookup("ServiceServer");

}

class ServiceServerImpl:

До:

try {

    Naming.rebind("ServiceServer", new ServiceServerImpl());   

}

Сейчас (как и в предыдущем классе, я добавил классы импорта в началочасть кода):

try {
    Registry registry = LocateRegistry.createRegistry(10001);
    registry.bind("ServiceServer", new ServiceServerImpl());   

}

Во-вторых , я пытаюсь запустить проект (F6) в Netbeans, где servicebrowser помечен как основной класс.Это был отказ от связи снова.После этого я запускал только класс ServiceServerImpl (Shift + F6), а затем запускал весь проект.Итак, это работает.

PS Я не использовал cmd и пытался

"запустить rmiregistry"

, потому что приложение работает без него.

...