JTabbedPane als Chat-Client

flor

Mitglied
Hallo,
habe da mal wieder ein Problem.

Ich möchte gerne meinen Chat erweitern, indem ich einzelne Räume
in Tabs ( JTabbedPane) erzeuge.

Das funktioniert alles ganz gut, bis auf die Kleinigkeit ,das was ich gesendet habe wird
nicht in meinem outputfield (JTextArea) angezeigt.

In einem normalen Frame funktioniert das alles wunderbar.
Wie oder was muss ich machen ?

Ist das überhaupt zu entfehlen ,sowas mit einem JTabbedPane zu realisieren ?

Ich sage schon mal Danke.

mfg flor
 
Hi,
da du den Aufbau nur ganz grob skizziert hast, ist es schwar den Fehler zu finden. Vielleicht gibst du mal ein paar Codeschnipsel her, z.B.: die Methode zum empfangen der Nachricht.
Ciao
DosCoder
 
Hi,
so sieht der Code aus.

Code:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*; 
import java.net.*;
import java.io.*;
public class TabDemo extends JFrame implements Runnable ,ActionListener{
private JTextField textFeld1;
private JButton button1;
JButton button2;
JTextArea textarea;
JTextField inputext,inputfield2;
JTextArea outputarea2;

JList liste2;
PrintStream out;
BufferedReader in;

Thread thread;
 String name,gruppe;
Button button;
List li;
String newline = "\n";
Socket server;
   public TabDemo(String title,String name,String gruppe) {

 netzwerk();
 setTitle("XXXX  -1-");
      setSize(600,400);
      setLocationRelativeTo(null);
      //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      setDefaultCloseOperation(DISPOSE_ON_CLOSE); 
      
      JTabbedPane tab = new JTabbedPane();//einmal
      add(tab, BorderLayout.CENTER);
    
      JLabel l1 = new JLabel("Label 1");

      textFeld1 = new JTextField();

      button1 = new JButton("1");

      GridBagConstraints gbc = new GridBagConstraints();

      JPanel panel1 = new JPanel(new GridBagLayout());
      panel1.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
      panel1.add(l1, gbc);

      gbc.gridx = 1;
      gbc.fill = GridBagConstraints.HORIZONTAL;
      gbc.weightx = 1.0;
      panel1.add(textFeld1, gbc);
      
      gbc.gridy = 1;
      gbc.fill = GridBagConstraints.NONE;
      gbc.anchor = GridBagConstraints.EAST;
      gbc.weightx = 0.0;
      panel1.add(button1, gbc);

      tab.add(panel1, "Tab1");
       


     JPanel panel2 = new JPanel(new BorderLayout());
    
      String [] lis ={name};
      JList liste2 = new JList(lis);
   
      liste2.setFixedCellWidth(150);
      liste2.setBackground(Color.red);
      panel2.add(liste2, BorderLayout.EAST); 
      
   
      final JTextArea outputarea2 = new JTextArea(5,20);
      outputarea2.setBackground(Color.yellow);
      outputarea2.addActionListener(this);
      panel2.add(outputarea2, BorderLayout.CENTER);
      // panel2.add("Center", outputarea2);
      final JTextField inputfield2 = new JTextField();
      inputfield2.addActionListener(this);
      panel2.add(inputfield2, BorderLayout.SOUTH); 

inputfield2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){

senden(inputfield2.getText());
inputfield2.setText("");

}});

   
tab.add(panel2, "Tab2");

setVisible(true);
}

public void netzwerk(){
  	try
		{
		
	       //  socket = new Socket(this.getCodeBase().getHost(), PORT);
           Socket server = new Socket("192.168.1.6",1234);
	  
            out = new PrintStream(server.getOutputStream(),true);//orgi
            in = new BufferedReader(new InputStreamReader(server.getInputStream(),"UTF-8"));//ok t

              
		} catch (IOException e)
		{
                        e.printStackTrace();
			
			say("Verbindung zum Server fehlgeschlagen!","Child System off");
			
		}
               if (thread == null)
		{
			thread = new Thread(this);
			thread.setPriority(Thread.MIN_PRIORITY);
                      
			thread.start();
		}
}

	public void run()
	{
         
		String line;
                String meldung;

		try
		{
                  while(true){ 
		//for(;;){
      
		         line = in.readLine();
                   
			 if(line == null)break;
                         //if(line !=null)
                          
			 meldung = line.substring(3);
                       
			 switch(line.charAt(0))
			 {
			
		         case 'S':  //Senden
                     
                         outputarea2.append(meldung +"\n");
                
			
                         
                         break;
			  default:
                          break;
                         }//switch
					
			 //thisThread.sleep(interval);		
			//}
                    }
                   //  thisThread = null;
                  // thread.sleep(50);
		} catch (Exception e) {
                         // say(e.toString(),"System"); 
                         e.printStackTrace();
                          say("1.1-Verbindung zum Server abgebrochen","Child System off"); 
                           return;
                           }
}



public void actionPerformed(ActionEvent ea){
// nix
}

public void senden(String meldung)
   {
     meldung = name + " [ " + gruppe + " ] :: " +  meldung;
     out.println("S: " +  meldung);
  
      out.flush();
} 

public void say(String msg, String m)
{
//outputarea.appendText("* "+msg+" * "+ m +"\n");
outputarea2.append("* "+msg+" * "+ m +"\n");
}
   public static void main(String[]args) {
String name="";
String gruppe="";
      TabDemo td = new TabDemo("Tabbed Pane Frame",name,gruppe);
 td.netzwerk();

   }
}

ich hoffe auf eure Hilfe.

mfg flor
 
Zuletzt bearbeitet:
Hi,
aufgrund der fehlenden Obkejtorientierung und den vielen Kommentaren ist es sehr schwer, deinen Code zu lesen. Das erste was mir aufgefallen ist, ist, dass du dich mit einem anderen PC verbindest. Zum Testen deines Programmes kannst du einfach die IP "127.0.0.1" angeben und den Server auf dem selben PC laufen lassen.
Kommt denn die Nachricht an? Überprüfe das mal mit Systemout.print();

Cioa
DosCoder
 
Hi,
ich bin jetzt etwas weiter ,hatte das Tab immer über ein Applet gestartet.

Die Daten werden gesendet, ich habe auch eine Verbindung zu einem
anderen Client-Applet und dem normalen Frame dort werden die
Daten die ich mit dem Tab sende ausgegeben.

Das Problem ist wohl die run() Methode( oder besser gesagt -> outputarea2.append() )
im Tab die liefert bei direkt starten
des Tabs beim senden eine Null Pointer Exception .




aufgrund der fehlenden Obkejtorientierung
Was muss ich mir darunter vostellen?
Alles nur Hobby, wobei ich jeden Rat gerne annehme.

out.println(xx) hatte ich schon im code.

mfg flor

edit:
Der Fehler wird wohl in der Methode netzwerk() Thread ausgelöst.
/edit
 
Zuletzt bearbeitet:
Hi,
mit fehlender Objektorientierung meine ich, dass du alles in eine Klasse gesteckt hast. Eine Klasse sollte für eine Aufgabe zuständig sein! Bei dir macht diese Klasse folgendes:
1.Aufbauen jedes einzelnen GUI-Objektes, man könnte das so machen, dass man für jedes GUI-Objekt eine Unterklasse erzeugt und im Konstruktor das Objekt konstruiert (Background, Text, etc), dazu ist ein Konstruktor schließlich da.
2.Senden der Nachricht , hier könnte man eine eigene Klasse für den Thread programmieren
3.Abholen der Nachirchten, siehe Punkt oben
4.Aufbauen des Netzwerkes, hier ist eindeuting eine eingene Klasse von nöten.

Nun zu deinem Problem:
Die Methode JTextArea.appendText gibt es nicht!. Kommt den beim Kompilieren keine Fehlermeldung? Statt appendText kannst du mal nur append versuchen.

Ciao
DosCoder
 
Hi,
sorry Fehler von mir,

ich benutze nur : append();

das appendText ist noch aus dem Applet awt ,Fehler bei copi and paste .

ok,das werde ich versuchen.

mfg flor
 

Neue Beiträge

Zurück