Threads einbinden

phil21xx

Mitglied
Hallo an alle,

Habe ein kleines Problem. Wie kann ich denn meinen Server (siehe unten) ganz simpel über EINEN Thread starten lassen und dazu noch einen ZWEITEN Thread einpflegen der einfach nur schläft oder "die Sekunden zählt"!

Java:
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
  

public class ServerMahnung extends UnicastRemoteObject implements SCInterface  {
    
    /** Creates a new instance of ServerMahnung */
    public ServerMahnung() throws RemoteException {
    }
    
 
 
    
    public String getMahnung (String x) throws RemoteException{
  
    return  "Mahnungshöhe :" + x + " * 1.03 ";
}
    
  
 
 
 
public static void main (String[]args){
    
    try{
        
        ServerMahnung servermahnung = new ServerMahnung();
        Naming.rebind("ServerMahnung", servermahnung);
        System.out.println("Server ist funktionstüchtig!");
    }
    
    catch(Exception ex){
        ex.printStackTrace();
    }
}
}

Vielen Dank im Voraus
phil21xx
 
Um Sekunden zu zählen könntest du einen Timer verwenden. Ist zwar seltsam, das Swing Packet hier zu verwenden, aber so sollte es gehen:
Folgendes in den Konstruktor von ServerMahnung:
Java:
new Timer(1000,new ActionListener() {
  public void actionPerformed(ActionEvent event) {
    counter++;
  }
}).start();

counter ist dann eine Membervariable von ServerMahnung.
 
Was genau soll parallel ausgeführt werden? In deiner Klasse gibt es ja keine Methode, ausser dem Konstruktor und getMahnung. Soll bereits der Konstruktor parallel zur main-Methode ausgeführt werden?

Vielleicht ist es ja das, was du suchst.
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Random;

import javax.swing.Timer;

public class ServerMahnung extends UnicastRemoteObject implements
		SCInterface, Runnable {

	private int counter = 0;

	/** Creates a new instance of ServerMahnung */
	public ServerMahnung() throws RemoteException {
		new Timer(1000, new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				counter++; // zähle die Sekunden
			}
		}).start();
		new Thread(this).start(); // starte run() parallel
	}

	public String getMahnung(String x) throws RemoteException {

		return "Mahnungshöhe :" + x + " * 1.03 ";
	}

	public void run() {
		System.out.println("run startet parallel und macht irgendwas");
		Random rand = new Random();
		while(true) {
			try {
				System.out.println("Seit dem Start sind "+counter+" Sekunden vergangen");
				Thread.sleep(rand.nextInt(5000)+500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args) {

		try {

			ServerMahnung servermahnung = new ServerMahnung();
			Naming.rebind("ServerMahnung", servermahnung);
			System.out.println("Server ist funktionstüchtig!");
		}

		catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}
 
javimka füg das bitte mal in meinen code ein, damit ich weiss wie du das meinst - bekomme immer einen Fehler.
 
Zuletzt bearbeitet:
Ich weiss nicht, wie du das über deinen RMI Server ausdrucken willst.
Aber du siehst doch sicher, dass in meiner run() Methode mehr oder weniger Unsinn steht, der nur die Funktionsweise demonstrieren soll. Entferne diesen Code und schreibe das ins run(), was wirklich passieren soll.

Was kriegst du denn für einen Fehler?
 
Kann ich nicht den Server über die run() Methode starten lassen und nicht in meiner public static void main(String[] args)..:

Das wäre das gewünschte, als meinen Code (siehe unten) durch den "Unsinn" ersetzen.

Java:
ServerMahnung servermahnung = new ServerMahnung();
Naming.rebind("ServerMahnung", servermahnung);
System.out.println("Server ist funktionstüchtig!");

Mit deinem Coding kann ich momentan nichtmehr mit meiner GUI auf über meine RMI Client Server Anwendung etwas versenden.

Es wird im Interpreter folgendes angezeigt:

run startet parallel und macht irgendwas
Seit dem Start sind 0 Sekunden vergangen
Server ist funktionstüchtig!
Seit dem Start sind 4 Sekunden vergangen
Seit dem Start sind 7 Sekunden vergangen
Seit dem Start sind 10 Sekunden vergangen
Seit dem Start sind 15 Sekunden vergangen
.
.
.

Davor mit dem alten Coding wurde mir über die C:\WINDWOS\system32\cmd.exe

Server ist funktionstüchtig!

ausgegeben und man konnte Daten versenden.


Problem:

Es sollte also nur der Serveraufruf/aufbau über die run() Methode gestartet werden

Java:
ServerMahnung servermahnung = new ServerMahnung();
Naming.rebind("ServerMahnung", servermahnung);
System.out.println("Server ist funktionstüchtig!");
 
Zuletzt bearbeitet:
Lösche doch meinen Code und setze deinen an dessen Stelle, innerhalb der main-Methode. Dann funktioniert alles wie vorher, nur dass es nicht mehr der main-Thread ist, der das ausführt, sondern ein Neuer.
 
Java:
Thread t1 = new Thread(new Runnable(){
  public void run() {
     while(true){
     }
  }
});

t1.start();

So kann man ganz einfach mehrere Threads erstellen 🙂
 

Zurück
Oben