Problem mit return-werten

Status
Nicht offen für weitere Antworten.

Man-in-Black

Mitglied
So der Titel is vielleicht irreführend aber was besser is mir grad net eingefallen ;)

ich hab folgendes Problem:

Ich schreibe gerade an meiner Bachelorarbeit und habe im Zuge dessen einen TCP-Server entwickelt, der Anfragen entgegennimmt und mir dann eben Antworten schickt.

Nun hab ich aber ein kleines Problem bei dem mir selbst meine Kommilitonen net helfen konnten.

Ich habe eine Server-Klasse, in der die ganzen Funktionen definiert sind (wär hätts gedacht ;))

Nun habe ich eine JList in meiner grafischen Oberfläche, die bei Klick die UserListe der verbundenen User auf dem Server neu abrufen soll.
Die User werden in einer Hashtable gespeichert.

Hier mal der Teil der die verbundenen User abfragt:

Code:
public String getUsers() {
   String users;
   users="users|";
   for (Enumeration e = clients.keys();e.hasMoreElements();)
      users+=(String) e.nextElement() + "|";
   if (! users.equals("users|"))
      users = users.substring(0, users.length() - 1);
   return users;
}

Innerhalb der Serverklasse funktioniert das abrufen der verbundenen User tadellos.

Nun habe ich für die grafische Oberfläche aber eine neue Klasse angelegt, in der die User dann eben dargestellt werden.
Dafür verwende ich eine JList. Der Aufbau der Oberfläche ist hier aber recht egal.

Allerdings nicht die Übergabe der verbundenen User, die funktioniert nämlich nicht.

Ich habe ganz rudimentär bei klick eines Buttons veranlasst, die Liste neu einzulesen, und er schreibt auch schön darunter, aber eben nur den String "users|", alle anderen verbundenen User eben nicht.
Code:
class UpdateListener implements ActionListener {
   public void actionPerformed(ActionEvent f) {
      listModel.addElement(server.getUsers());
   }
}

Ich hoffe ihr könnt mir helfen bei meinem Problem, da das gerade irgendwie der Knackpunkt ist.

Beim debuggen sieht das ganze so aus, wie wenn die Hashtable für die GUI-Klasse einfach leer ist.

Solltet ihr noch irgendwelche weiteren Codeschnipsel brauchen oder weitere Infos die ich jetzt vergessen habe sagt einfach Bescheid, die liefer ich dann direkt nach.

Ich danke euch jetzt schon mal für die Mithilfe

Gruß
Man-in-Black
 

hdi

Top Contributor
also mit Klassen-übergreifenden return-Werten hat das nichts zu tun, sowas gibt keine Probleme.
Eigentlich kommen nur 2 Dinge in Frage:

1) Das Objekt "server" im Client ist nicht wirklich das gleiche Server-Objekt, wie das, in dessen HashMap
du alle clients speicherst

2) Irgendwas stimmt nicht mit dem Updaten der HashMap bei neuen Clients, sodass das evlt hinterherhinkt..

Lass dir bitte erstmal nur den Aufruf

Code:
server.getUsers();

bei deinem Button-Listener auf der Konsole ausgeben, damit man ausschliessen kann, dass es sich nur
um einen grafischen Fehler/internen Model-Fehler deiner JList handelt.
 

Man-in-Black

Mitglied
also habe nun auch mal einfach ausgeben lassen auf der konsole da steht auch nur das berüchtige "users|", genau wie in der liste, damit kann es also nix zu tun haben.

im debugger ist die hashliste bei dem aufruf aus der anderen funktion auch leer.

und in der gui-klasse greife ich über ein objekt des servers auf die funktion zu, sollte also auch passen. gestartet ist der server natürlich auch, das geschieht direkt beim start des programms.

ich denke eher dass fall 1 zutrifft, aber wie kann ich das herausfinden und viel wichtiger, wie kann ich das beheben?
 

hdi

Top Contributor
Um das beantworten zu können brauchen wir den kompletten Code + main Methode
(zumindest alles was damit zu tun hat)
 
G

Gelöschtes Mitglied 5909

Gast
verwendest du RMI oder ein eigenes Protokoll? irgendwo müssen die Daten ja herkommen und ich befürchte dass da was schief geht
 

Man-in-Black

Mitglied
ok dann poste ich mal (wenns net ganz so schön formatiert is sorry aber ich will net jede zeile bearbeiten nu ;))

Server:
Code:
public class Server {

   private Hashtable clients;
   private int port;

   public Server(int port) {
      this.port=port;
      clients = new Hashtable();
   }

   private void startServerListener() {
      ServerSocket ss ;
      try {
         ss = new ServerSocket(port);
         System.out.println("Server gestartet...");
         while (true)
            new ServerBody(ss.accept(), this).start();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

   public void addClient(String name, ServerBody body) {
      clients.put(name, body);
   }

   [...]

   public String getUsers() {
      String users;
      users="users|";
      for (Enumeration e = clients.keys();e.hasMoreElements();)
         users+=(String) e.nextElement() + "|";
      if (! users.equals("users|"))
         users = users.substring(0, users.length() - 1);
      return users;
   }

   public void broadcast(String name, String msg) throws Exception {
      for (Enumeration e = clients.keys();e.hasMoreElements();)
         ((ServerBody) clients.get((String) e.nextElement())).send(name+ ": " + msg);
   }

   public void send(String name, String targetname, String msg) throws Exception {
      ((ServerBody) clients.get(targetname)).send(/*name+ ": " + */msg);
   }

   public boolean isClient(String name) {
      return clients.containsKey(name);
   }

   public static void ServerStart(String[] x) {
      if (x.length != 1) {
         System.out.println("#java Server <port>");
         System.exit(0);
      }
      new Server(Integer.parseInt(x[0])).startServerListener();
   }
}

class ServerBody extends Thread {

   private Socket cs;
   private Server server;
   private PrintWriter out;

   public ServerBody(Socket cs, Server server) {
      this.cs=cs;
      this.server=server;
   }

   public void run() {
      BufferedReader in;
      StringTokenizer str;
      String command, name, names = null, msg, targetname;
      int n;
      try {
         in = new BufferedReader (new InputStreamReader(cs.getInputStream()));
         out = new PrintWriter(new DataOutputStream(cs.getOutputStream()));
         name = in.readLine();
         server.addClient(name, this);
         //server.broadcast(name, server.getUsers());
         System.out.println("+ Anmeldung Client " + name);
         System.out.println(server.getUsers());
         for (String buffer;(buffer = in.readLine()) != null;) {
            n = buffer.indexOf(" ", 0);
            targetname = buffer.substring(0, n);
            msg = buffer.substring(n + 1, buffer.length());
            if (targetname.equals("all")) {
               server.broadcast(name, msg);
               System.out.println(">Broadcast von Client " + name + " : " + msg);
            } else if (server.isClient(name)) {
               server.send(name, targetname, msg);
               System.out.println(">Nachricht von Client " + name + " an " + targetname + ": " + msg);
            } else
               this.send("Error: Client " + targetname + " existiert nicht!");
         }
         server.removeClient(name);
         System.out.println("- Abmeldung Client " + name + "!");
         System.out.println(server.getUsers());
         in.close();
         out.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   
   }

   public void send(String msg) throws Exception {
      out.println(msg);
      out.flush();
   }
}

GUI
Code:
public class Main extends JPanel
                      implements ListSelectionListener {
    private JList list;
    private DefaultListModel listModel;
    Server server = new Server(8080);

    private static final String hireString = "Hire";
    private static final String fireString = "Fire";
    private static final String updateString = "Update";
    private JButton fireButton;
    private JTextField employeeName;
    private JButton updateButton;

//    public void showUsers() {
//        new Thread() {

//            @Override
//            public void run() {
//
//            }
//        }.start();
//    }

    public Main() {

        super(new BorderLayout());
        
        listModel = new DefaultListModel();

        listModel.addElement(server.getUsers());
        
        //Create the list and put it in a scroll pane.
        list = new JList(listModel);
        list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        list.setSelectedIndex(0);
        list.addListSelectionListener(this);
        list.setVisibleRowCount(10);
        JScrollPane listScrollPane = new JScrollPane(list);

        JButton hireButton = new JButton(hireString);
        HireListener hireListener = new HireListener(hireButton);
        hireButton.setActionCommand(hireString);
        hireButton.addActionListener(hireListener);
        hireButton.setEnabled(false);

        fireButton = new JButton(fireString);
        fireButton.setActionCommand(fireString);
        fireButton.addActionListener(new FireListener());

        updateButton = new JButton(updateString);
        updateButton.setActionCommand(updateString);
        updateButton.addActionListener(new UpdateListener());

        employeeName = new JTextField(10);
        employeeName.addActionListener(hireListener);
        employeeName.getDocument().addDocumentListener(hireListener);
        String name = listModel.getElementAt(
                              list.getSelectedIndex()).toString();

        //Create a panel that uses BoxLayout.
        JPanel buttonPane = new JPanel();
        buttonPane.setLayout(new BoxLayout(buttonPane,
                                           BoxLayout.LINE_AXIS));
        buttonPane.add(fireButton);
        buttonPane.add(Box.createHorizontalStrut(5));
        buttonPane.add(new JSeparator(SwingConstants.VERTICAL));
        buttonPane.add(Box.createHorizontalStrut(5));
        buttonPane.add(employeeName);
        buttonPane.add(hireButton);
        buttonPane.add(updateButton);
        buttonPane.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));

        add(listScrollPane, BorderLayout.CENTER);
        add(buttonPane, BorderLayout.PAGE_END);
    }

    class UpdateListener implements ActionListener {
        public void actionPerformed(ActionEvent f) {
            listModel.addElement(server.getUsers());
        }
    }

    class FireListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            //This method can be called only if
            //there's a valid selection
            //so go ahead and remove whatever's selected.
            int index = list.getSelectedIndex();
            listModel.remove(index);

            int size = listModel.getSize();

            if (size == 0) { //Nobody's left, disable firing.
                fireButton.setEnabled(false);

            } else { //Select an index.
                if (index == listModel.getSize()) {
                    //removed item in last position
                    index--;
                }

                list.setSelectedIndex(index);
                list.ensureIndexIsVisible(index);
            }
        }
    }

    //This listener is shared by the text field and the hire button.
    class HireListener implements ActionListener, DocumentListener {
        private boolean alreadyEnabled = false;
        private JButton button;

        public HireListener(JButton button) {
            this.button = button;
        }

        //Required by ActionListener.
        public void actionPerformed(ActionEvent e) {
            String name = employeeName.getText();

            //User didn't type in a unique name...
            if (name.equals("") || alreadyInList(name)) {
                Toolkit.getDefaultToolkit().beep();
                employeeName.requestFocusInWindow();
                employeeName.selectAll();
                return;
            }

            int index = list.getSelectedIndex(); //get selected index
            if (index == -1) { //no selection, so insert at beginning
                index = 0;
            } else {           //add after the selected item
                index++;
            }

            listModel.insertElementAt(employeeName.getText(), index);
            //If we just wanted to add to the end, we'd do this:
            //listModel.addElement(employeeName.getText());

            //Reset the text field.
            employeeName.requestFocusInWindow();
            employeeName.setText("");

            //Select the new item and make it visible.
            list.setSelectedIndex(index);
            list.ensureIndexIsVisible(index);
        }

        //This method tests for string equality. You could certainly
        //get more sophisticated about the algorithm.  For example,
        //you might want to ignore white space and capitalization.
        protected boolean alreadyInList(String name) {
            return listModel.contains(name);
        }

        //Required by DocumentListener.
        public void insertUpdate(DocumentEvent e) {
            enableButton();
        }

        //Required by DocumentListener.
        public void removeUpdate(DocumentEvent e) {
            handleEmptyTextField(e);
        }

        //Required by DocumentListener.
        public void changedUpdate(DocumentEvent e) {
            if (!handleEmptyTextField(e)) {
                enableButton();
            }
        }

        private void enableButton() {
            if (!alreadyEnabled) {
                button.setEnabled(true);
            }
        }

        private boolean handleEmptyTextField(DocumentEvent e) {
            if (e.getDocument().getLength() <= 0) {
                button.setEnabled(false);
                alreadyEnabled = false;
                return true;
            }
            return false;
        }
    }

    //This method is required by ListSelectionListener.
    public void valueChanged(ListSelectionEvent e) {
        if (e.getValueIsAdjusting() == false) {

            if (list.getSelectedIndex() == -1) {
            //No selection, disable fire button.
                fireButton.setEnabled(false);

            } else {
            //Selection, enable the fire button.
                fireButton.setEnabled(true);
            }
        }
    }

    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    private static void createAndShowGUI() {
        //Create and set up the window.
        JFrame frame = new JFrame("ListDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        //Create and set up the content pane.
        JComponent newContentPane = new Main();
        newContentPane.setOpaque(true); //content panes must be opaque
        frame.setContentPane(newContentPane);

        //Display the window.
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        //Schedule a job for the event-dispatching thread:
        //creating and showing this application's GUI.
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
        Server.ServerStart(new String[] {"8080"});
    }
}

die code für die gui hab ich ausm internet, da bin ich so frei, da ich mich net so groß auseinandersetzen wollte, deshalb sind da auch noch so sachen wie fire und hire dabei.
und da mein programm nur prototypisch implementiert werden muss, ist das auch net ganz so dramatisch.
die gui an sich funktioniert, es geht nur um die sache mit dem update -.-
 

hdi

Top Contributor
Hm ich muss sagen ich blicke nicht so richtig durch, habe aber in diesen client-server geschichten
wenig Erfahrung.

Versuch einfach mal folgendes:

in der GUI:

Code:
Server server = new Server(8080);

ersetzen durch:

Code:
Server server;

Und in der main-Methode:

Code:
this.server = Server.ServerStart(new String[] {"8080"});

Dafür musst du in der ServerStart Methode den Rückgabewert von void auf Server setzen und die Zeile

Code:
new Server(Integer.parseInt(x[0])).startServerListener();

ersetzen durch:

Code:
Server s = new Server(Integer.parseInt(x[0]));
s.startServerListener();
return s;
 

Man-in-Black

Mitglied
der tipp in der server-klasse ging so, aber in gui-klasse net

mh habs versucht aber dann kann ich das ganze nicht mal compilen, da er mir in der main methode beim start folgendes sagt:
Code:
...\rudi\Main.java:270: non-static variable this cannot be referenced from a static context

und die main methode muss static bleiben...
 

hdi

Top Contributor
achso, ja klar sorry.

Lass createAndShowGui() das Main-Objekt returnen, und mach dann:

Code:
public static void main(String[] args) {
        Main m;
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                m  = createAndShowGUI();
            }
        });
        Server s = Server.ServerStart(new String[] {"8080"}); 
        m.setServer(s);
}

und in der GUI noch die Methode

Code:
public void setServer(Server s){
     this.server = s;
}

... das ist natürlich alles extrem scheisse gelöst, und eig. solltest du das alles wegwerfen und
neu anfangen, weil dein Code ist wirklich unter aller Sau mit den ganzen statischen Objekten usw.
Und meine Tipps hier sind dementsprechend auch alles andere als vorbildlich. Also... keine Ahnung
ob das funzt, aber selbst wenn, ist es schlecht.
 

Man-in-Black

Mitglied
jo es soll ja auch net schön sein... soll nur ne prototypische lösung werden... wenn ich lustig bin mach ich nach der bachelorarbeit dran weiter dann bau ich den schön :D
 

Man-in-Black

Mitglied
so ich habe nun mal die Vorschläge versucht umzusetzen, aber irgendwie geht das net so ganz, da er immer ne final-Variable voraussetzt.
final variablen kann ich aber nicht mehr ändern was hierbei aber ja passieren würde...langsam verzweifel ich daran echt...
 

Ebenius

Top Contributor
hdi hat gesagt.:
[...]
Code:
public static void main(String[] args) {
        Main m;
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                m  = createAndShowGUI();
            }
        });
}
hdi, dazu musst Du aber dem Compiler sehr viel Alkohol geben ... Wie soll das gehen?

Ebenius
 

hdi

Top Contributor
Ohen das jetz in Eclipse gepastet zu haben, aber ich weiss grad echt nich wieso das nich gehen soll? Muss Main final sein, oder was meinst du?
 

hdi

Top Contributor
ja war n flüchtigkeitsfehler. Aber was Ebenius geschrieben hat klingt irgendwie nach "mehr", oder kam das nur so rüber?
 

Ebenius

Top Contributor
Wie willst Du denn mit invokeLater eine Variable in die enclosing-class zuweisen? Wann soll denn das gesetzt werden? Weshalb ist denn gefordert, dass die Variablen final sind, damit sie an eine inner class abgegeben werden können? Kompilierbar ist's nicht und wird's nicht.
 

hdi

Top Contributor
Hm also ich kanns akzeptieren, aber verstehen tu ich's nicht so ganz.
Wieso kann ich einer finalen Variable keinen Wert in einer inner class zuweisen? (Sonst geht es ja)
 

Ebenius

Top Contributor
hdi hat gesagt.:
Hm also ich kanns akzeptieren, aber verstehen tu ich's nicht so ganz.
Wieso kann ich einer finalen Variable keinen Wert in einer inner class zuweisen? (Sonst geht es ja)
Das geht nie. Zeig mir ein Beispiel!
 

hdi

Top Contributor
Mit "sonst" meine ich, wenn es sich nicht um eine inner class handelt:

Code:
final int x;
x=2;

Wieso funktioniert diese Zuweisung also nicht auch in einer inner class? Die Variable x hat ja
nix mit der inner class zu tun. (Mir ist auch grad wieder nich klar, wieso das nochmal final sein muss,
aber ich hatte das schon mal gefragt... muss mal den thread raussuchen)
 

Ebenius

Top Contributor
Nur ein Beispiel:
Code:
final int x;
new Thread(new Runnable() {
  public void run() {
    try {
      Thread.sleep(60*60*1000);
    } catch (InterruptedException ex) {
    }
    x = 4;
  }
}).start();
System.out.println(x);
Soll jetzt Zeile 10 eine Stunde warten, bis x gesetzt wurde?

Ebenius
 

hdi

Top Contributor
edit: Okay hab jetzt geschnallt was du damit sagen willst.

Aber mir ist noch nicht klar: Reden wir hier von inner classes im Allgemeinen, oder nur von inner classes
die Runnable sind?
 

Ebenius

Top Contributor
Selbes Beispiel:
Code:
final int x;
button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    x = 4;
  }
});
System.out.println(x);
Soll jetzt Zeile 7 jetzt warten, bis ein Trottel einen Button klickt?

Ebenius
 

hdi

Top Contributor
Okay.. aber was hat's mit inner classes zu tun?
Wenn ich dem Button einem Listener zuweise, und nicht per inner class,
hat man doch irgendwie das gleiche Problem?

Sagen wir der Listener weist der globalen final Variable etwas zu..


edit: Achso dann lässt es sich nicht kompilieren weil bei dem Sys-out eine Meldung "may not have been initialized" kommt oder?

edit2: So, jetzt ist's eingeschlagen ;) Mir ist es grad etwas aus dem Fokus verronnen, dass inner classes
ja nur eine Methode definieren, die aufgerufen werden kann. Aber sie ist nicht Teil der sequentiellen Abarbeitung, deshalb kann man nicht sagen was genau passiert oder ob etwas passiert. Alles klar :)
 

Ebenius

Top Contributor
hdi... in Java gibt's keine globalen Variablen. Wenn Du Member-Variablen meinst die final sind: Die müssen im Konstruktor gesetzt werden, sonst Compiler-Error...
 

hdi

Top Contributor
Jo dachte an statics, das versteh ich unter "global", also nicht member-variablen. Aber hab grad gesehen dass man denen direkt nen Wert zuweisen muss. Alles klar jetz, danke
 

Ebenius

Top Contributor
hdi hat gesagt.:
edit2: So, jetzt ist's eingeschlagen ;) Mir ist es grad etwas aus dem Fokus verronnen, dass inner classes
ja nur eine Methode definieren, die aufgerufen werden kann. Aber sie ist nicht Teil der sequentiellen Abarbeitung, deshalb kann man nicht sagen was genau passiert oder ob etwas passiert. Alles klar :)
:toll: Jetzt wird's richtig! Jetzt musst Du nur noch den Begriff "globale Variable" aus Deinem Kopf bekommen, dann wird alles gut. ;-)
 

Ebenius

Top Contributor
hdi hat gesagt.:
Jo dachte an statics, das versteh ich unter "global", also nicht member-variablen. Aber hab grad gesehen dass man denen direkt nen Wert zuweisen muss. Alles klar jetz, danke
statics final's müssen entweder bei der Deklaration oder in einem static initializer zugewiesen werden.
 

hdi

Top Contributor
Jo, dafür mach ich mir ein Gehirn-Branding gleich neben "in Java gibt's kein Call-By-Reference"
 

Ebenius

Top Contributor
hdi hat gesagt.:
Jo, dafür mach ich mir ein Gehirn-Branding gleich neben "in Java gibt's kein Call-By-Reference"
Den Satz am besten auch noch loswerden. Der stimmt zwar, wenn man ihn verstanden hat. Wenn man ihn aber in ein Forum postet, führt's meist zu Verwirrung, weil ja Referenzen by value übergeben werden... Dort gibt der Durchschnitts-Fragesteller ad hoc auf. :-D
 

hdi

Top Contributor
Den Satz am besten auch noch loswerden. Der stimmt zwar, wenn man ihn verstanden hat.

Ja ich verstehe es.

Wenn man ihn aber in ein Forum postet, führt's meist zu Verwirrung, weil ja Referenzen by value übergeben werden... Dort gibt der Durchschnitts-Fragestiller ad hoc auf.

Mag ja sein aber trotzdem merk ich mir das so, wie es ist ;)
 

Leroy42

Top Contributor
hdi hat gesagt.:
Sagen wir der Listener weist der globalen final Variable etwas zu..

Einer final-Variablen etwas in einem Listener zuzuweisen ist schon ziemlich hirni.
:cool:

hdi hat gesagt.:
Mag ja sein aber trotzdem merk ich mir das so, wie es ist ;)

:applaus: :applaus: :applaus:

Richtig! Gerade in einem Forum etwas Halbfalsches als Lernhilfe stehen zu lassen, lehne ich ab.
 

hdi

Top Contributor
@Leroy

Soll man jetzt hier im Forum nichts mehr schreiben dürfen, das evtl ein Anfänger missverstehen könnte, weil er keinen Plan hat? Wenn ein User hier nen Thread aufmacht und fragt, ob es Call-By-Reference gibt, würde ich nicht nur "Ne" sagen sondern ihm das schon genauer erklären.
Aber darum geht's in diesem Thread überhaupt nicht.

Ausserdem ist daran nichts halbfalsch, noch nicht mal ein achtel falsch. Es ist einfach nur 100% korrekt,
dass es in Java kein Call-By-Reference gibt. Denn das ist ein spezieller Ausdruck aus der Informatik, der ein bestimmtes Verhalten beschreibt, das es in Java einfach gar nicht gibt.

Und als "Lernhilfe" hab ich das erst recht nicht gelabelt, das war ein eingestreuter Satz in einer OT-Diskussion.

Aber um deine innere Ruhe wiederherzustellen, und für alle Anfänger die sich vllt irgendwie hierher verirren
und nun evtl. "Halbfalsches" Wissen haben:

"Call by Reference" in Java
 

Leroy42

Top Contributor
:shock:

Du hast mich vollkommen mißverstanden!

Ich meinte, ich finde auch, daß es keinen Sinn macht, Anfänger
mit halb-falschen Wissen zu verwirren.

Natürlich gibt es in Java kein call-by-reference und das soll
auch deutlich klargestellt werden.

Aber okay, meine Wortschöpfung halbfalsch ist ungünstig gewählt :oops:

hdi hat gesagt.:
Soll man jetzt hier im Forum nichts mehr schreiben dürfen, das evtl ein Anfänger missverstehen könnte, weil er keinen Plan hat?

Eben nicht! Genau das Gegenteil versuchte ich, durch mein Posting zu bewirken.

hdi hat gesagt.:
Wenn ein User hier nen Thread aufmacht und fragt, ob es Call-By-Reference gibt, würde ich nicht nur "Ne" sagen sondern ihm das schon genauer erklären.

Richtig!

hdi hat gesagt.:
Und als "Lernhilfe" hab ich das erst recht nicht gelabelt, das war ein eingestreuter Satz in einer OT-Diskussion.

Ich meinte mit "Lernhilfe" Postings derer, die aber das ist doch call-by-reference als Aussage stehen
lassen könnten.

hdi hat gesagt.:
Aber um deine innere Ruhe wiederherzustellen, und für alle Anfänger die sich vllt irgendwie hierher verirren und nun evtl. "Halbfalsches" Wissen haben:

"Call by Reference" in Java

:applaus: :applaus: :applaus:

(Meine innere Ruhe ist jetzt wiederhergestellt, wo ich klargestellt habe, daß ich dich
keineswegs angreifen wollte, sondern genau so denke wie du :cool: )
 

Ebenius

Top Contributor
Leroy42 hat gesagt.:
Also eigentlich müßte Ebenius sich angegriffen fühlen.

:cool:
Hatte ich auch anders herum verstanden. Liegt wohl daran, dass der Applaus-Hans ( :applaus: ) eher ironisch wirkt. Angegriffen fühle ich mich mal net. :)

Ich hatte ursprünglich lediglich darauf hinweisen wollen, dass man solche Schlagwörter wie call by reference am besten nicht einfach so einstreut. Wenn man das einfach in irgendeinen Anfänger-Thread reinschmeißt, ohne zu erklären was es bedeutet, dann ist dem Leser wenig geholfen. Es verwirrt meist nur. Der Grund warum ich das anmerke: Ich habe in den letzten Wochen einige Threads gesehen, wo genau das passiert ist.

Just my $0.02

Ebenius
 

Leroy42

Top Contributor
Ebenius hat gesagt.:
Leroy42 hat gesagt.:
Also eigentlich müßte Ebenius sich angegriffen fühlen.

:cool:
Hatte ich auch anders herum verstanden. Liegt wohl daran, dass der Applaus-Hans ( :applaus: ) eher ironisch wirkt.

:shock: Also applaudieren tue ich nie ironisch! :cool:

Aber daß das so hätte verstanden werden können, ist natürlich mein Fehler! ( :oops: )

Ebenius hat gesagt.:
Ich hatte ursprünglich lediglich darauf hinweisen wollen, dass man solche Schlagwörter wie call by reference am besten nicht einfach so einstreut.

Sehe ich nicht so, da call-by-reference eine eindeutige Definition besitzt.

... und ob Anfänger oder nicht ist mir da vollkommen egal.

Aber okay: Beenden wir den Krieg! :toll: :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Problem mit Umlauten und Eszett bei InputStream Allgemeine Java-Themen 3
Max246Sch Backtracking Problem Box Filler Allgemeine Java-Themen 6
NightVision402 VisualVM Startskript Problem Allgemeine Java-Themen 3
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
F Problem mit PDFBOX Library Allgemeine Java-Themen 1
A Java modul Problem Allgemeine Java-Themen 4
D Read JSON File Problem Allgemeine Java-Themen 9
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
J Problem mit JasperReports Allgemeine Java-Themen 8
M log4j Problem mit jlink Allgemeine Java-Themen 19
8u3631984 Problem beim Mocken von Record Klassen Allgemeine Java-Themen 4
torresbig Website login Problem - Jsoup, wie bisher, klappt nicht! Allgemeine Java-Themen 31
P Selenium . getText Problem Allgemeine Java-Themen 9
A Jar zu Exe Problem Allgemeine Java-Themen 13
sserio Variablen Liste erstellt und ein Problem mit dem Index Allgemeine Java-Themen 6
S Folgendes Problem bei einem Programm Allgemeine Java-Themen 1
stormyark Problem beim Klassen erstellen Allgemeine Java-Themen 1
A Thread.sleep Problem Allgemeine Java-Themen 2
A Problem bei der Nachbarschafttest Allgemeine Java-Themen 11
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
G javamail Problem beim Empfangen von Nachrichten Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
N Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12
S Java OpenOffice Problem mit Windows-Benutzerwechsel Allgemeine Java-Themen 19
K Threads RAM Problem Allgemeine Java-Themen 20
P Operatoren Problem mit Zähler in recursiver Schleife Allgemeine Java-Themen 2
C Int Problem Allgemeine Java-Themen 8
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
C Webseiten Programm problem Allgemeine Java-Themen 5
M LocalDate Problem Allgemeine Java-Themen 4
J "Problem Objektorientierung" Allgemeine Java-Themen 20
geekex Problem Meldung! Was tun?! Allgemeine Java-Themen 19
T Klassen Override Problem Allgemeine Java-Themen 7
L Unbekanntes Problem Allgemeine Java-Themen 1
FrittenFritze Problem mit einer JComboBox, Event temporär deaktivieren Allgemeine Java-Themen 11
Blender3D Java Swing Programm Windows 10 Autostart Problem Allgemeine Java-Themen 2
F HTTPS Zertifikat Problem Allgemeine Java-Themen 3
M OpenCV KNearest Problem Allgemeine Java-Themen 0
Tommy Nightmare Project Euler: Problem 22 Allgemeine Java-Themen 2
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
N Vererbung Design-Problem mit vorhandenen, von der Klasse unabhängigen Methoden Allgemeine Java-Themen 12
P Eclipse Projekt anlegen macht Problem Allgemeine Java-Themen 1
RalleYTN META-INF/services Problem Allgemeine Java-Themen 3
F Java Mail Problem: Authentifizierung wird nicht immer mitgeschickt Allgemeine Java-Themen 1
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben