# rmic - class not Found



## Evilsadness (29. Okt 2014)

Ich habe folgende Klassen: 

Interface IMastermind 


```
package mm;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface IMastermind extends Remote
{
	public String compareCode(String input) throws RemoteException;
	public String createCode()  throws RemoteException;
}
```

Klasse Mastermind 


```
package mm;

import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class Mastermind extends UnicastRemoteObject implements IMastermind, Serializable {

	protected Mastermind() throws RemoteException {
		super();
	}

	String code;

	private static final long serialVersionUID = -2764884476758802897L;

	public String compareCode(String input) throws UserInputNotValidException {

		int indirekt = 0;
		int direkt = 0;

		if (!checkInput(input)) {
			System.out.println("Client hat falsche Eingabe gemacht.");
			throw new UserInputNotValidException("Der Code muss aus 4 Zahlen bestehen");
		}

		for (int i = 0; i < 4; i++) {
			if (input.charAt(i) == code.charAt(i)) {
				direkt++;
			} else {
				for (int j = 0; j < 4; j++) {
					if (input.charAt(j) == code.charAt(i)
							&& input.charAt(j) != code.charAt(j)) {
						indirekt++;
					}
				}
			}
		}
		String temp = "Richtig gesetzt: " + direkt
				+ "\nRichtig, aber an falscher Stelle: " + indirekt;
		if (code.equals(input)) {
			return null;
		}
		return temp;
	}

	private boolean checkInput(String input) {
		return input.matches("\\d{4}");
	}

	public String createCode() {
		String r = "";
		for (int i = 0; i < 4; i++) {
			r += (int) (Math.random() * 10);
		}
		this.code = r;
		return r;
	}

}
```

Klasse Server


```
package mm;

import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Scanner;

public class Server {
	public static void main(String[] args) throws RemoteException, AlreadyBoundException {
		Mastermind master = new Mastermind();
		String code = master.createCode();

		try {
			Naming.rebind("Master", master);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		System.out.println("Mastermindobjekt angemeldet");
		System.out.println("Erstellter Code: " + code);

	}
}
```

Klasse Client


```
package mm;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.Registry;

public class Client
{
  public static void main( String[] args ) throws  NotBoundException,RemoteException
  {
    
    IMastermind master = null;
	try {
		master = (IMastermind)Naming.lookup("rmi://192.168.11.22:1099/Master");
	} catch (MalformedURLException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}

    
    boolean fertig = false;
	System.out
	.println("Das Spiel beginnt mit einem "
			+ 4
			+ "-stelligen Code (Ziffern 0-9). Bitte geben Sie einen Code ein.");
    while(!fertig){
        try {

			BufferedReader rein = new BufferedReader(new InputStreamReader(
					System.in));
        	String temp;
        	if((temp = master.compareCode(rein.readLine())) != null){
        		System.out.println(temp);
        	}else{
        		fertig = true;
        	}
    	} catch (UserInputNotValidException e) {
    		System.out.println("falschen Code eingegeben!");
    	} catch (IOException e) {
    		System.out.println("falschen Code eingegeben");
		}
    }
    System.out.println("Sie haben den Code erraten!");


  }
}
```

Klasse Exception


```
package mm;

import java.rmi.RemoteException;

class UserInputNotValidException extends RemoteException {
	private static final long serialVersionUID = 1L;

	public UserInputNotValidException() {
	}
	public UserInputNotValidException(String s) {
		super(s);
	}
}
```

Verzeichnisstruktur ist wie folgt aufgebaut:

RMI - Mastermind - rmic
.......|
.......|
.......bin
.......src
..........|
..........|
..........mm (package)
..............|
..............|
..............alle java datein


übersetze es zunächst einmal mit "javac" im "src" ordner wie folgt:
javac -classpath . mm\IMastermind.java
javac -classpath . mm\Mastermind.java

nun will ich mit rmic den Stub und Skeleton erzeugen

egal ob ich nun in "mm" gehe und 
rmic Mastermind
oder
rmic Mastermind.class 

oder es aus src versuche:
rmic mm\Mastermind
oder
rmic mm.Mastermind

Immer kommt die Fehlermeldung. "Class Mastermind not found".

Was mach ich falsch? :bahnhof:



Vorher habe ich es mit dynamischen Proxies gemacht, wollte es aber mit rmic versuchen


----------



## AppOcean Team (30. Okt 2014)

Warum willst du es denn mit rmic machen?
Wenn man in die Dokumentation von UnicastRemoteObject schaut steht da eindeutig, dass Static Stubs mittlerweile Deprecated sind! Außerdem haben die doch keinen Vorteil gegenüber dynamischen Proxies, oder?


----------



## Evilsadness (30. Okt 2014)

ich weiß,  dass dynamische Proxies besser sind,  trotzdem finde ich das mal interessant mit rmic zuherum zu experimentieren. 
Ich benutze JDK 1.8 ,Kann es vllt. iwie daran liegen?  weil es ja Deprecated ist
ich weiß auf jeden Fall nicht wo mein Denkfehler ist.


----------

