probleme mit variablen eines Objects

Status
Nicht offen für weitere Antworten.

PrinzMartin

Aktives Mitglied
Moin Moin

ich habe eine Klasse, in der die Butten Actions stehen, im Konstruktor wird ein Objekt (client) der Klasse cClient erstellt.

dann rufe ich wenn ich auf den "connect" Button klicke, die Methode client.connect(); auf.
in cClient gibt es ein Objekt Socket socket;

in der Methode wird jetzt mit socket = new Socket(...) ein socket erstellt (klappt auch wunderbar.)

wenn ich jetzt aber auf den Button "send" klicke, wird die Methode client.send(); aufgerufen.
Da das ja eine Methode des gleichen Objektes ist, dachte ich, auch "socket" währe dann bekannt, "socket" ist aber "null".

ich hänge noch mal beide klassen als Code an und hoffe, dass ich da nur nen dummen Fehler gemacht habe, danke schon mal fürs eventuelle drüberschauen.....


cInteraktion
Code:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 15.10.2007
  * @author
  */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.io.*;
import java.net.*;

public class cInteraktion extends JButton
{

  // Anfang Variablen
  JTextArea ta_eingabe;
  JTextArea ta_ausgabe;
  JTextField tf_status;
  cClient client;
  Socket socket;
  // Ende Variablen

  // Anfang Ereignisprozeduren
  public cInteraktion(JTextArea pTa_eingabe, JTextArea pTa_ausgabe, JTextField pTf_status)
  {
    this.ta_eingabe = pTa_eingabe;
    this.ta_ausgabe = pTa_ausgabe;
    this.tf_status = pTf_status;
    client = new cClient();
  }
  
  public void btn_connectActionPerformed(ActionEvent evt)
  {
    client.connect(ta_eingabe, ta_ausgabe, tf_status);
  }

  public void btn_disconnectActionPerformed(ActionEvent evt)
  {

  }

  public void btn_sendActionPerformed(ActionEvent evt)
  {
    client.send(ta_eingabe, ta_ausgabe, tf_status);
  }
  // Ende Ereignisprozeduren
}




und cClient
Code:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 15.10.2007
  * @author
  */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
import java.io.*;
import java.net.*;

public class cClient
{

  // Anfang Variablen
  BufferedReader in;
  String msg;
  Thread read;
  Socket socket;
  // Ende Variablen

  // Anfang Ereignisprozeduren
  public cClient()
  {

  }
  
  public void connect(JTextArea pTa_eingabe, JTextArea pTa_ausgabe, JTextField pTf_status)
  {
    try {
          socket = new Socket("localhost", 1234);
          pTa_ausgabe.setText(String.valueOf(socket));
          pTf_status.setText("connected...");
          pTf_status.setBackground(Color.GREEN);
          read = new Thread(new tRead(pTa_ausgabe, socket));
          read.start();
        } catch(IOException e)
        {
          pTf_status.setText("disconnected...");
          pTf_status.setBackground(Color.RED);
        }
  }
  
  public void send(JTextArea pTa_eingabe, JTextArea pTa_ausgabe, JTextField pTf_status)
  {
    pTa_ausgabe.setText(String.valueOf(socket)+"hallo");         //**************hier wird dann null ausgegeben
  }

  // Ende Ereignisprozeduren
}
 
S

SlaterB

Gast
ein Fehler ist nicht direkt ersichtlich,
möglich wäre z.B. dass du dich in unterschiedlichen cInteraktion- und damit auch in unterschiedlichen cClient-Objekten befindest,

wie du aber weißt kann es gar nichts einfacheres geben, als solche Fehler selber zu finden,

beim Erstellen:
System.out.println("erstelle Socket in Objekt "+hashCode()+": "+socket);

beim send dann:
System.out.println("Socket in Objekt "+hashCode()+" ist: "+socket);
 

PrinzMartin

Aktives Mitglied
ich korrigiere,

wie ich aber J E T Z T weiß :wink: hash code hab ich bisher noch nie gehört geschweige denn benutzt^^ gibt mir das also scheinbar an, in welchem objekt ich mich befinde?

außerdem könntest du recht haben mit den unterschiedlichen Interaktion klassen, ich werde jetzt mal ganz am anfang in der Gui schon ein socket erstellen und dann immer übergeben als Parameter oder gibt es ne andere möglichkeit eine variable in allen instanzen als gleich zu setzen?

in dem Bereich passieren mir echt oft Fehler

aber danke sehr hilft auf jeden Fall weiter :toll:
 
S

SlaterB

Gast
es gibt andere Möglichkeiten (Stichwort Singleton), zentrale Erzeugung und Verteilung ist aber gar nicht so falsch,

falls dir das irgendwann für mehrere zu verteilende Objekte zu bunt wird, dann eine Klasse Configuration oder ähnlich erstellen
 

PrinzMartin

Aktives Mitglied
Naja so schlimm ist es noch nicht aber ich hab immer noch das selber Problem, obwohl ich eigentlich dachte, ich hätte den socket jetzt immer übergeben. Allerdings dürfte es hier ja ok sein, dass mir der hashCode() verschiedene Objekte anzeigt.

Ich hab mal gedacht ich nehme socket.hashCode() aber das gibt ne null pointer exception, was ja klar ist wenn socket Null ist also gefunden hab ich den Fehler noch nciht^^

ich such aber mal weiter der Quelltext ist son bissal unübersichtlich, da das son Learning by doing Projekt ist....




wo liegt eigentlich der unterschied ob ich this.socket = schreibe oder nur socket...

zum beispiel wenn ich ein Parameter pSocket habe und möchte jetzt den socket der klasse, gleich dem übergebenen setzen, damit beide klassen den gleichen haben....

ist es da egal was ich nehme?
 

PrinzMartin

Aktives Mitglied
OK ich denke ich kriege es jetzt hin ich hab mir so ne Englische seite zu deinem Singleton vorschlag durchgelesen und das ist ja total einfach :shock: hat ich gar nicht gedacht^^

jetzt stell ich mein Programm darauf um und hoffe, dass das dann klappt und ich werde es in Zukunft dauernd benutzen ...


also danke noch mal
 

Wildcard

Top Contributor
PrinzMartin hat gesagt.:
jetzt stell ich mein Programm darauf um und hoffe, dass das dann klappt und ich werde es in Zukunft dauernd benutzen
Besser nicht. Singletons haben einen ganz klaren Zweck, dass ein Objekt nur einmal existieren darf. Dieser Use-Case exisitiert zwar, ist aber höchst selten. In allen anderen Fällen wird ein Singleton zum Antipattern das sich später bitter rächt.
Singleton ist das am häufigsten missbrauchte Design-Pattern...
 

PrinzMartin

Aktives Mitglied
dürfte aber dies mal durchaus zutreffen, da mein Client ja nur genau EINE verbindung zum Server hat und auch kein zweites socket bestehen darf, da das ja nicht mehr ankommen würde.........

also so wie ich das verstanden habe erfüllt das meine Anforderung in diesem Falle ...

Oder hab ich was falsch verstanden...


PS:
Ich hab keine ahnung was Design Pattern geschweige denn Pattern überhaupt sind ich glaub ich muss nach diesem Projekt viel nacharbeiten da is so viel neues drin, von dem mir die Hintergründe komplett unklar sind^^ :cry:
 

Wildcard

Top Contributor
PrinzMartin hat gesagt.:
dürfte aber dies mal durchaus zutreffen, da mein Client ja nur genau EINE verbindung zum Server hat und auch kein zweites socket bestehen darf, da das ja nicht mehr ankommen würde.........
Dann stellt sich doch automatisch die Frage warum ein singleton und nicht einfach static?

PS: Unter einem Design Pattern versteht man ein erprobte Klassenarchitektur für ein allgemeines, wiederkehrendes Problem in der Softwareentwicklung.
 

PrinzMartin

Aktives Mitglied
also bei mir gab es folgendes Problem...

Mein Projekt war undurchdacht ein Learning by Doing Projekt was sich immer wieder geändert hat.

Dann brauche ich diese eine Socket Verbindung in allen möglichen Klassen... und jede Instanz braucht natürlich die gleiche verbindung...

jetzt stelle ich diese verbindung einfach in dem Singleton bereit und hole ihn mir über die Instanz und dann änder oder benutz ich ihn....

mit static hab ich noch nie was gemacht müsst ich mir mal anschauen aber was ich da so drüber gehört habe, löst das doch mein Problem nicht oder?.....
 

Murray

Top Contributor
PrinzMartin hat gesagt.:
mit static hab ich noch nie was gemacht müsst ich mir mal anschauen aber was ich da so drüber gehört habe, löst das doch mein Problem nicht oder?.....
Wie hast denn dann das Singleton implementiert?
 

PrinzMartin

Aktives Mitglied
Hehe ich sag ja ich nutze in dem Programm einige Teile, deren Hintergründe ich nicht kenne.... für mich war die Erklärung im Internet schlüssig dass durch das private da niemend aus ner anderen Klasse ne Instance erzeugen kann und dann hab ich das Beispiel so übernommen und es sieht jetzt so aus:

Code:
/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 15.10.2007
  * @author
  */


import java.io.PrintWriter;

import java.net.Socket;



public class cSingleton
{
  // Anfang Variablen
    Socket socket;
    PrintWriter out;
    
    private static cSingleton instance = new cSingleton();
  // Ende Variablen
    /**
     * Default-Konstruktor, der nicht außerhalb dieser Klasse
     * aufgerufen werden kann
     */
    private cSingleton() {}
  // Anfang Ereignisprozeduren
    /**
     * Statische Methode, liefert die einzige Instanz dieser
     * Klasse zurück
     */
    public static cSingleton getInstance()
    {
        return instance;
    }

  // Ende Ereignisprozeduren
}



naja ich habs also mehr oder weniger übernommen wenn das Projekt dann mal komplett läuft, dann werde ich mir genau anschauen was ich da eigentlich Fabriziert habe....

was genau das static da oben bewirkt ist mir nicht direkt klar^^

Aber momentan lässt die Performance zu wünschen übrig nur der Server + ein Client bringen das kleine Fernsehfenster oben in der ecke schon zum Ruckeln :cry: dabei hab ich doch nur insgesamt 3 Threads...

naja mal sehen was da noch kommt, momentan bin ich dabei auch ne möglichkeit zu bieten wieder zu disconnecten....
 
S

SlaterB

Gast
Wildcard hat gesagt.:
PrinzMartin hat gesagt.:
dürfte aber dies mal durchaus zutreffen, da mein Client ja nur genau EINE verbindung zum Server hat und auch kein zweites socket bestehen darf, da das ja nicht mehr ankommen würde.........
Dann stellt sich doch automatisch die Frage warum ein singleton und nicht einfach static?
wie soll man denn sonst ein Singleton darstellen, wenn nicht mit einer statischen Variable?/ ist nicht jede statische Variable ein Singleton?
 

Murray

Top Contributor
SlaterB hat gesagt.:
wie soll man denn sonst ein Singleton darstellen, wenn nicht mit einer statischen Variable?/ ist nicht jede statische Variable ein Singleton?
Ist sicherlich eine Definitionsfrage - das Singleton-Pattern bezieht sich ja auf eine Klasse:
Gang of Four hat gesagt.:
Ensure a class has only one instance, and provide a global point of access to it.
Die Tatsache, dass eine Instanz einer Klasse in einer statischen Variablen abgelegt ist, macht die entsprechende Klasse noch nicht zum Singleton - für den Verwender ist das aber ziemlich egal (besonders, wenn die statische Variable auch noch final ist).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
P Klassen Klassen bzw. Variablen Probleme Java Basics - Anfänger-Themen 8
K Probleme mit Threads (Variablen übergeben) Java Basics - Anfänger-Themen 6
R Variablen Probleme mit Auflösung von Variablen Java Basics - Anfänger-Themen 4
N Probleme mit gültigen variablen Java Basics - Anfänger-Themen 6
N Probleme mit Variablen als Anfänger Java Basics - Anfänger-Themen 3
F Probleme mit Variablen Java Basics - Anfänger-Themen 9
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
C Probleme mit Byte konvertieren nach int Java Basics - Anfänger-Themen 10
P Probleme mit NetBeans: Wie lässt sich jar. Datei an einem MacBook öffnen Java Basics - Anfänger-Themen 21
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
Jxhnny.lpz TicTacToe Spiel vs Computer. (Probleme) Java Basics - Anfänger-Themen 7
B Quiz mit RMI Probleme mit RMI start Java Basics - Anfänger-Themen 4
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
V Probleme Guessing Game Java Basics - Anfänger-Themen 8
hebein PDF Ausdruck auf Drucker - Probleme mit Format Java Basics - Anfänger-Themen 17
R JMenu/JMenuItem Probleme Java Basics - Anfänger-Themen 2
B Static vs non static und Probleme daraus Java Basics - Anfänger-Themen 13
J Probleme mit dem Debugger Java Basics - Anfänger-Themen 4
I Probleme mit OutputStream - Datei lässt sich nicht öffnen Java Basics - Anfänger-Themen 4
J Probleme mit Kompilierung Java Basics - Anfänger-Themen 11
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
C Probleme mit paintComponent Java Basics - Anfänger-Themen 13
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
E JavaFX Editor Probleme mit der Zwischenablage Java Basics - Anfänger-Themen 12
C Probleme mit dem Erstellen und Importieren von Packages Java Basics - Anfänger-Themen 6
3 OOP erste Versuche, OOP zu verstehen. Probleme mit gettern und settern Java Basics - Anfänger-Themen 4
R Erste Schritte Probleme bei 2D Spielfeld, mit einzufügender "Person" Java Basics - Anfänger-Themen 5
P Probleme bei der Installation von JavaFX Java Basics - Anfänger-Themen 3
S Mehrere Probleme im Code Java Basics - Anfänger-Themen 7
D Probleme mit JFrame und der Größe Java Basics - Anfänger-Themen 8
Dimax String Probleme Java Basics - Anfänger-Themen 12
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Splayfer Java Array Probleme Java Basics - Anfänger-Themen 3
J Probleme bei IllegalArgumentException "werfen". Java Basics - Anfänger-Themen 1
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
X Probleme im Umgang mit PriorityQueue Java Basics - Anfänger-Themen 75
D Probleme mit dem Windowbuilder und JComboBox Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
X Probleme mit Übungsaufgaben zu Zahlentypen Java Basics - Anfänger-Themen 4
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
P Erste Schritte Probleme mit dem Programmieren Java Basics - Anfänger-Themen 12
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
Franzi1001 Probleme mit Eclipse Java Basics - Anfänger-Themen 7
T Probleme bei Installation von JDK Java Basics - Anfänger-Themen 2
C Probleme mit String-Vergleich Java Basics - Anfänger-Themen 4
C Probleme bei Regex Java Basics - Anfänger-Themen 9
V Probleme mit Arrays Java Basics - Anfänger-Themen 8
D Kleine Probleme mit Split-Befehlen Java Basics - Anfänger-Themen 5
T Probleme mit Strings Java Basics - Anfänger-Themen 6
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
N Probleme mit dem ActionListener Java Basics - Anfänger-Themen 4
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
L Probleme mit Java Java Basics - Anfänger-Themen 3
S Probleme mit abspielen einer .wav Datei Java Basics - Anfänger-Themen 2
J Probleme bei der Umwandlung einer Farbe von Hex zu RGB Java Basics - Anfänger-Themen 8
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
M Probleme bei rekursiver Zuordnung Java Basics - Anfänger-Themen 1
I Probleme mit 2 dimensionale Arrays Java Basics - Anfänger-Themen 3
H Best Practice View probleme Java Basics - Anfänger-Themen 2
B Probleme mit Kreisberechnung Java Basics - Anfänger-Themen 15
E Probleme mit Scanner Java Basics - Anfänger-Themen 4
J Eclipse Export Probleme Java Basics - Anfänger-Themen 25
M Probleme beim verwenden von Packages Java Basics - Anfänger-Themen 6
D Probleme mit der Übergabe einer BorderPane Java Basics - Anfänger-Themen 2
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
BlueFox Tabelle in der Konsole ausgeben - Probleme Java Basics - Anfänger-Themen 1
G Methoden Probleme beim Methodenaufruf Java Basics - Anfänger-Themen 2
V Klassen ObjectInputStream ->ReadObject Probleme Java Basics - Anfänger-Themen 5
P Probleme mit der Do-Schleife Java Basics - Anfänger-Themen 2
F Erste Schritte Compiling Probleme Java Basics - Anfänger-Themen 13
S Neuling und Probleme bei Schulaufgabe Java Basics - Anfänger-Themen 5
J Anfänger: ActionListener und ProcessBuilder machen Probleme Java Basics - Anfänger-Themen 6
S Erste Schritte 2D Grafik Probleme mit KeyListener. Java Basics - Anfänger-Themen 18
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
M Probleme mit Eclipse Java Basics - Anfänger-Themen 20
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
S Compiler-Fehler javac hat Probleme mit Paketen unter OSX Java Basics - Anfänger-Themen 2
J Probleme beim schreiben von Dateien Java Basics - Anfänger-Themen 5
B Variablen Probleme mit Eclipse Java Basics - Anfänger-Themen 6
H Mouse- und KeyListener Probleme? Java Basics - Anfänger-Themen 5
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
I Probleme bei Verzeichnissanalyse Java Basics - Anfänger-Themen 12
F Probleme mit privaten Klassen (abstrakten Klassen) Java Basics - Anfänger-Themen 1
H Probleme mit Klassen...oder: Eine Uhr Java Basics - Anfänger-Themen 9
G Probleme mit Konsole Java Basics - Anfänger-Themen 4
S Probleme mit GamGrid Spiel-Erstellung => Actor reagiert nicht auf Tastatur Java Basics - Anfänger-Themen 2
G Probleme mit Eclipse oder der URL Klasse Java Basics - Anfänger-Themen 5
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M Probleme mit Anzeigen von String in GUI und if-Anweisung Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben