Hoe een methode van een thread aan te roepen?

Status
Niet open voor verdere reacties.

niekfct

Terugkerende gebruiker
Lid geworden
19 jul 2006
Berichten
1.563
Ik probeer voor school een chatprogramma te maken, en ik heb nu dit:
De server is een thread die luisterd naar verbindingen van clients. Als er een client verbind maakt de server een thread aan voor die client. Deze thread slaat hij op in een vector. In de server klasse staat ook een methode die door de threads aan geroepen kan worden om de tekst door te sturen. Nu wil ik met deze methode een methode in alle threads aanroepen, maar ik krijg dit niet voor elkaar. Dit is de code voor de server kant:

Server:
Code:
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;

public class ChatServer extends Thread
{
	public static ServerSocket serverSocket = null;
	public static Socket vSocket = null;
	public static int AANTAL = 1;
	public static Vector <Thread> threads = new Vector(AANTAL, 1);
	public static ChatServer a = new ChatServer();
	
	
	public static void main(String[] args)
	{			
		System.out.println("Starting Server...");
		
		try {
            serverSocket = new ServerSocket(4444);
        } catch (IOException e) {
            System.err.println("Could not listen on port: 4444.");
            System.exit(-1);
        }
		
		a.start();
	}
	
	public void run()
	{
		try
		{
		vSocket = serverSocket.accept();				//hij wacht net zo lang tot er iemand verbindt.
		ChatServerThread b = new ChatServerThread(vSocket, a);
		b.start();
		threads.addElement(b);

                               [color=green] //b.sendBack("hoi");[/color]
		
		} catch(IOException e)
		{
			System.err.println("Foutje");
		}	
	}
	
	public void ChatSendText(String msg)
	{
		for(int i=0; i<threads.size(); i++)
		{
			[color=red]//(threads.elementAt(i)).sendBack(msg);[/color]
		}
	}
	
}

ChatServerThread:
Code:
import java.net.*;
import java.io.*;



public class ChatServerThread extends Thread {
    private Socket socket = null;
	private ChatServer parent; 

    public ChatServerThread(Socket socket, ChatServer parent) {
	super("ChatServerThread");
	this.socket = socket;
	this.parent = parent;
    }

    public void run() {

	try {
	    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
	    BufferedReader in = new BufferedReader(
				    new InputStreamReader(
				    socket.getInputStream()));
		
		out.println("Verbonden, typ je tekst.");
		
		String inputLine;
		while ((inputLine = in.readLine()) != null)
		{
			//out.println(inputLine);
			System.out.println(inputLine);
			parent.ChatSendText(inputLine);
		}
		
	} catch (IOException e) {
	    System.err.println("Client heeft de verbinding verbroken");
	}
    }
	
	public void sendBack(String msg)
	{
		//versturen van de tekst terug naar de clients		
	}
		
	}
}

In de server heb ik 2 stukjes gemarkeerd, groen en rood. De groene werkt wel, de rode niet. Hoe komt dit? Of moet ik het anders doen?
 
Je moet een vector van ChatServerThreads aanmaken, niet een van Threads.
De klasse Threads kent geen sendBack methode, de klasse ChatServerThreads wel.
Denk er maar eens over na. Van het moment dat je het ChatServerThread object in de vector stopte was het object geen ChatServerThread meer, maar een Thread.

Anyway, ik vind je methode van message doorgeven wat raar. Waarom je gebruik je niet gewoon de input/outputstream van je socket? Veel handiger...Lees anders de officiele java tutorial erover eens.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan