Ich habe folgende Klassen:
Interface IMastermind
Klasse Mastermind
Klasse Server
Klasse Client
Klasse Exception
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
Interface IMastermind
Java:
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
Java:
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
Java:
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
Java:
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
Java:
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
Zuletzt bearbeitet: