Autor Thema: Probleme mit Applet das auf notes Daten zugreift  (Gelesen 6021 mal)

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Probleme mit Applet das auf notes Daten zugreift
« am: 08.06.03 - 12:21:51 »
Hi,
endlich habe ich mal wieder etwas Zeit gefunden um mich mit Java zu beschäftigen und bin total frustriert.

Ich wollte einfach mal versuchen ein Applet zu schreiben das im Notes Client läuft und auf ein Feld im Names zugreift und dessen Value dann anzeigt.

Aber ich bekomm das nicht zum laufen.

Kann mir jemand helfen ??.

Ich poste mal den code aber nicht so genau hinschauen nach dem ganzen probieren ist da viel quatsch drin.
Noch eine andere frage gibt es in java sowas wie einen Alert in Javascript zum debuggen ??

Also hier der code.

import lotus.domino.*;
import java.awt.*;
import java.applet.*;
import java.util.*;
/**
 * @author Standard
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */
public class viewapplet extends AppletBase {
   
Database db;
Document doc;
Session s;
DocumentCollection dc;
String test1;
public   void notesAppletInit()
   {
super.notesAppletInit();
   Button q=new Button("1");
add(q);
   }

public void notesAppletStart()
{
try
   {
   
//NotesThread.sinitThread();   
   
   Session s=this.getSession();
   //Session s=NotesFactory.createSession();
   
   db=s.getDatabase("","names.nsf");
   dc = db.getAllDocuments();
   doc = dc.getFirstDocument();
   
   Button q=new Button(doc.getItemValueString("LastName"));
add(q);
      }
catch (NotesException n)
   {
      System.out.println("Datenbank oder Session nicht gekriegt");
   }
}

public void notesAppletStop()
{
}

public void notesAppletDestroy()
{
}

public void paint(Graphics g)
{

   try {
      
      test1=doc.getItemValueString("Lastname");
   } catch (NotesException e) {
   }
   if (test1=="")
   {
   g.drawString("Hallo",30,70);
   }
g.drawString(test1,50,90);

Button b=new Button("ok");
add(b);
}

}

wenn das totaler schrott ist kann mir vielleicht einer zeigen wie es geht.
Danke in voraus.

Qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #1 am: 08.06.03 - 17:23:00 »
Hi,

noch einmal die bescheidende Bitte mir zu vertrauen, wenn ich sage, dass Applets eine Technis ist, die sich eben nicht durchgesetzt hat.
Es ist vermutlich leichter eine MVC-Anwendung mit JSP/Servlets auf Tomcat zu schreiben, die über Corba auf einen Notes-Server zugreift, als ein Applet im Notes-Client.

Frage: Welche IDE benutzt du? Ist das WSAD5? Sieht verdammt so aus (vom code).

Aber o.k. ich mag Herausforderungen :-)

Ich habe es mit TextPad und jdk nachkompiliert bekommen. Dafür habe ich notes.jar in den Classpath gesetzt.

Ich habe dann eine nsf auf einem Notes-client 5.08 erstellt und habe dann eine Form erstellt, in die ich eben diese Applet aus dem Filesystem eingebunden habe.

Dann habe ich im Notes-Client Files\Tools (Datei\Wergzeuge) \\ java debug console geöffnet.
Das ist ganz o.k.
Da bekommt man den Stack trace angezeigt.
Debuggen kannst du über WSAD (falls du das benutzt) über den dortigen echt ziemlich guten debugger.

... oder (vermutlich praktikabler, wenn du mit solchen höchst komplexen Dingen wie applets in notes auseinandersetzt) mit System.out.println("ein String");
Das ist dann analog zu alert in javaScript, nur das die Meldungen in die Java-Console geschrieben werden.

ok, hiers stacktrace:

Code
java.lang.ClassFormatError: Bad major version number

   at java.lang.ClassLoader.defineClass(ClassLoader.java:219)

   at COM.ibm.JEmpower.applet.AppletClassLoader.loadClass(AppletClassLoader.java:144)

   at COM.ibm.JEmpower.applet.AppletClassLoader.loadCode(AppletClassLoader.java:263)

   at COM.ibm.JEmpower.applet.AppletClassLoader.loadCode(AppletClassLoader.java:357)

   at COM.ibm.JEmpower.applet.AppletFrame.runLoader(AppletFrame.java:660)

   at COM.ibm.JEmpower.applet.AppletFrame.run(AppletFrame.java:372)

   at java.lang.Thread.run(Thread.java:466)

# Applet log: load: class viewapplet.class not found.

java.lang.ClassNotFoundException: viewapplet

   at COM.ibm.JEmpower.applet.AppletClassLoader.loadCode(AppletClassLoader.java:359)

   at COM.ibm.JEmpower.applet.AppletFrame.runLoader(AppletFrame.java:660)

   at COM.ibm.JEmpower.applet.AppletFrame.run(AppletFrame.java:372)

   at java.lang.Thread.run(Thread.java:466)

Ja. Das habe ich mir schon gedacht. Weil die Notes-VM eben nur Java1.18 versteht, kann sie mit Java-1.4 nicht viel anfangen.

Es hat also diesen ersten Sicherheitscheck für code schon nicht passiert.

Sieht das bei dir auch so aus ?

Gut. Ich kompiliere so:

Code
D:\jMy>javac -target 1.1 viewapplet.java


also mit -target 1.1 aus der Kommandozeile.
(das müsste auch über wsad gehen, falls du bestätigst das du wsad benutzt kann ich das noch mal nachchecken, wie genau.
Es wird dann nicht zu einer java1.4, sondern zu einer java1.18 Klasse.

ich erhalte eine Sicherheitsmeldung (darf nicht auf irgendwelche llotus.java Pakete zugreifen (wohl ecl-Sache).
Ich bestätige (trust signer)
... und bekomme eine neue Fehlermeldung.

irgendwas mit null-pointer exception.

cu.
sieht nicht schlecht aus.
free-your-mind-from-applet-slavery.

Kommando "Mindestens-eine-JVM > 1.3 "

axel
« Letzte Änderung: 08.06.03 - 23:23:54 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #2 am: 08.06.03 - 18:28:43 »
ok nach einer wilden und unstrukturierten debug-session (definitiv nicht mehr meine Art) habe ich so etwas wie ein Ergebnis.

Code
import lotus.domino.*;
import java.awt.*;
import java.applet.*;
import java.util.*;
/**
* @author Standard
*
* To change this generated comment edit the template variable "typecomment":
* Window>Preferences>Java>Templates.
* To enable and disable the creation of type comments go to
* Window>Preferences>Java>Code Generation.
*/
public class viewapplet extends AppletBase {

Database db;
Document doc;
Session s;
DocumentCollection dc;
String test1;
public   void notesAppletInit()
   {

            System.out.println("notesAppletInit() called");
            System.out.println("2");
super.notesAppletInit();
System.out.println("in Init");
   Button q=new Button("1");
add(q);
   }

public void notesAppletStart()
{
try
   {
   System.out.println("notesAppletStart() called");
//NotesThread.sinitThread();

   Session s=this.getSession();
   //Session s=NotesFactory.createSession();
System.out.println("hier");
   db=s.getDatabase("","names.nsf");
   dc = db.getAllDocuments();
   doc = dc.getFirstDocument();
   System.out.println("doc.form=" + doc.getItemValueString("form"));

   //Button q=new Button(doc.getItemValueString("LastName"));
//add(q);
      }
catch (NotesException n)
   {
      System.out.println("Datenbank oder Session nicht gekriegt");
   }
}

public void notesAppletStop()
{
}

public void notesAppletDestroy()
{
}

public void paint(Graphics g)
{
System.out.println("paint() called");
   try {

      test1=doc.getItemValueString("form");
   } catch (NotesException e) {
   }
   if (test1=="")
   {
   g.drawString("Hallo",30,70);
   }
g.drawString(test1,50,90);

Button b=new Button("ok");
add(b);
}

}

Ich weiss eigentlich nur noch recht wenig über applets.

Es gab offenbar ein Problem, dass du versuchst hast innerhalb von Methode AppletStart(), einen Button einzufügen.

Warum das so ist, ist mir jetzt auch nicht so klar, wg Applet-Life-Cycle-Wissens-Lücken.

Es ist aber schon relativ heftig, dass du in 3 (!) Standard-Life-Cycle-Callback-Methoden Gui-Komponenten anfügst:
- in appletInit()
- in appletStart() // geht nicht
- in paint()
Da solltest du dich für die Zukunft irgendwann auf eine best-practice einigen. :)

Das war die hartnäckigste Fehlermeldung,
(hab ich aus dieser Java-Console (oben beschrieben)).
Code
   at sun.awt.windows.WFontMetrics.stringWidth(WFontMetrics.java:160)

   at sun.awt.windows.WButtonPeer.getMinimumSize(WButtonPeer.java:26)

   at sun.awt.windows.WComponentPeer.getPreferredSize(WComponentPeer.java:128)

   at sun.awt.windows.WComponentPeer.preferredSize(WComponentPeer.java:370)

   at java.awt.Component.preferredSize(Component.java:1022)

   at java.awt.Component.getPreferredSize(Component.java:1003)

   at java.awt.FlowLayout.layoutContainer(FlowLayout.java:332)

   at java.awt.Container.layout(Container.java:458)

   at java.awt.Container.doLayout(Container.java:448)

   at java.awt.Container.validateTree(Container.java:519)

   at java.awt.Container.validateTree(Container.java:526)

   at java.awt.Container.validate(Container.java:501)

   at COM.ibm.JEmpower.applet.AppletFrame.run(AppletFrame.java:468)

   at java.lang.Thread.run(Thread.java:466)

java.lang.NullPointerException: 

   at sun.awt.windows.WFontMetrics.stringWidth(WFontMetrics.java:160)

   at sun.awt.windows.WButtonPeer.getMinimumSize(WButtonPeer.java:26)

   at sun.awt.windows.WComponentPeer.getPreferredSize(WComponentPeer.java:128)

   at sun.awt.windows.WComponentPeer.preferredSize(WComponentPeer.java:370)

   at java.awt.Component.preferredSize(Component.java:1022)

   at java.awt.Component.getPreferredSize(Component.java:1003)

   at java.awt.FlowLayout.layoutContainer(FlowLayout.java:332)

   at java.awt.Container.layout(Container.java:458)

   at java.awt.Container.doLayout(Container.java:448)

   at java.awt.Container.validateTree(Container.java:519)

   at java.awt.Container.validateTree(Container.java:526)

   at java.awt.Container.validate(Container.java:501)

   at COM.ibm.JEmpower.applet.AppletFrame.run(AppletFrame.java:553)

   at java.lang.Thread.run(Thread.java:466)

Naja die dürfte ja wohl sellbsterklärend sein. Ansonsten hast du deinen Beruf verfehlt.
Quatsch. Eben genau nicht. Von dieser Fehlermeldung kann kein Mensch  auf das Problem schliessen: (Problem ist: füge in appletStart() keine Komponenten an!!!)
Ergo haben wir es mit einem SCHEISS-IMPLEMENTIERUNGS-PHÄNOMEN zu tun.

Dieses Phänomen trifft man btw nicht nur bei Lotus kleinem Applet-Horrorladen sondern bei wirklich professionellen Dingen wie z.B. struts oder anderen open-Source-Komponenten-frameworks wo sowieso viel mehr rein investiert wird als bei Lotus.

Ich bin mit kleinschrittigen System.out.println() draufgekommen.
In mir vertrauteren Umgebungen als Notes-Applets arbeite ich damit nicht mehr.
Aber wie gesagt, du hast bei Notes5 immer das dicke Problem, dass es nicht Java2 ist.

Der Rest waren Standard-Probleme von Java-Anfängern:
Dein code fand ein Dokument vom Typ "local" also kein "person" oder hiess es "people" ? Ein Personendokument hast du erwartest (Abfrage auf das Feld "Lastname").

Ausserdem fragst du einmal auf "Lastname" und ein anderesmal auf "lastName" ab (oder so ähnlich). Java ist case-Sensitiv.

Erschwerend kam hinzu, dass es in Dokumenten von der form "local" offenbar weder "lastName" noch "Lastname" als Feld gibt.

Wenn du dann mit
Code
test1=doc.getItemValueString("Lastname");
if (test1=="") 
kommst.
--> wird eine NullPointerException geworfen.
test1 ist null, wenn es das Feld nicht gibt.
 

also
if (test1 == null) // müsste so sein, habs aber nicht ausprobiert.

ehem. Und test1 == "" ist auch keine gute Idee.
Es müsste test1.equals("");
heissen.
Aber das ist eine lange Geschichte.

Also:
Notes und Applets ist wirklich eine frustrierende Sache.
Greif besser mit Swing-Clients auf Notes zu.
Das ist einfacher.

gruss axel
« Letzte Änderung: 08.06.03 - 18:36:57 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #3 am: 08.06.03 - 21:55:33 »
Hi,

vielen Dank , daß du dir so eine mühe gemacht hast !!
IDE ist eclipse.
Ich glaub dir ja das applets mist sind aber ich möchte Daten aus verschiedenen Dbs im Notesclient (in einer view) anzeigen.
Leider bin ich dabei an den Notesclient gebunden da viele meiner Jungs die Daten auf Ihren Notebooks haben.
Die ganzen Button und so resultieren aus der ganzen Testerei zuerst hatte ich nur die sachen in der paint Methode stehen als das nicht gefunzt hat hab ich dann mal angefangen zu probieren.

Ich dachte mir eigentlich ich lese die Daten in ein globales array ein und durchlaufe dann in paint eine schleife um sie auszugeben.

Jetzt hab ich was von vectoren gelesen bietet mir das vielleicht Vorteile ??
Nochmals vielen Dank für deine Mühen

Gruß
qojote

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #4 am: 08.06.03 - 22:13:42 »
Nochmal Hi,

ich habs grad nochmal probiert und ich könnt mir echt in den hintern beissen.
Ich hab mich so drauf versteift das der Fehler an Java liegen muß, das ich nicht gemerkt habe das ich vergessen habe erst alle docs aus der Db zu löschen.

gruß
qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #5 am: 08.06.03 - 23:37:55 »
Hi,

am wichtigsten ist es, dass du das mit der Java Debug Console und System.out.println verstanden hast.

Ich würde nochmal über die allgemeine Struktur nachdenken.

Kannst du nicht beispielsweise die ganzen Daten aus den verschiedenen Datensätzen in einer Zugriffsdatenbank einfach über Agenten aggregieren ?????

Was du vorhast mit graphics.paint() das sieht so low level aus. Das darf es eigentlich nicht sein.

O.k. wenn du kein swing hast, dann könntest du immerhin  dynamisch generierte java.awt.Label oder java.awt.Field in einem GridLayout verwenden, um so eine view zu emulieren.

Aber ich sehe noch weitere Problemen.

Bitte denke über die Lösung mit der einen Datenbank nach, die Daten aus verschiedenen Datenbanken aggregiert.

java.util.Vector ist in der Tat eine sinnvolle Sache.
In Java musst du bereits beim initialisieren des Arrays wissen, wieviel Elemente er hat. Die Lists, Collections aus java.util.* sind da wesentlich einfacher zu handhaben (wird überall und in www.javabuch.de super erklärt, Kapitel 14).
In Post-Renaicanse Java (Java > 1.2) ist ArrayList meist besser als Vector. Sind aber recht ähnlich.
Die bislang didaktisch, wissenschaftlich und sonstwie wertvollste Erklärung lieferte Thomas Paul:
http://www.javaranch.com/newsletter/June2002/newsletterjune2002.jsp#collections

btw. Frage: Hast du beim Entwickeln das apidoc in den browser geladen. Das hat nämlich jeder.
Ich meine das hier:
http://java.sun.com/j2se/1.4.1/docs/api/
(kann man auch downloaden).

Axel
« Letzte Änderung: 09.06.03 - 01:22:47 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #6 am: 09.06.03 - 02:03:10 »

Leider bin ich dabei an den Notesclient gebunden da viele meiner Jungs die Daten auf Ihren Notebooks haben.


quojote,
ich hab ein Problem:
Die sitzen also disconnected an ihren NoteBook und die Applets versuchen auf andere Datenbanken zuzugreifen?
Haben die sich diese NSFs auch repliziert???

Es sieht von weiten für mich so aus, als wolltest du irgendwie Logik von dem Server auf die Clients verlagern.
Handelst du dir damit nicht einen Sack von Problemen ein?
Ich meine: Das Applets und auch sowas wie activeX nicht so einen tollen Erfolg hatten, serverseitige Technologien wie z.B. ASP, Servlets/JSP schon hat Gründe, die v.a. auch mit Synchronisierungsproblemen bei zuviel client zu tun haben...


Ich dachte mir eigentlich ich lese die Daten in ein globales array ein und durchlaufe dann in paint eine schleife um sie auszugeben.
Du willst doch Ansichten emulieren, oder?
Ansichten aus verschiedenen Datenbanken?

Eine sehr gebräuchliche straight forward Lösung wäre es wenn du die einzelnen Datensätze (Dokumente) als Objekte behandelst die du in Vektoren packst.
Also nehmen wir an du brauchst eine Ansicht "Leute" mit den Spaltenwerten "Name", "Vorname", "Geburtstag".
Dann machst du in Eclipse eine Klasse:
LeuteVO (vo für value-object :-) ) in Paket data.

da schreibst du dann einfach 3 private properties rein.

private String name;
private String vorName;
private Date geburtsTag;
 

Highlighte nun 1 dieser 3 Eigenschaften in der rechten gliederungs-Perspektive. Rechte Maustaste.
Da gibt es den berühmten "generate Setter and getter"-Trick. Draufklicken (generate getters and setters ist irgendwo im Kontextmenü) und einfach alles anhaken. Das ist v.a. auch OO mässig cool. Du kannst jetzt auf die 3 Eigenschaften mit settern und gettern zugreifen.

dann tust du da noch eine static factory-Methode rein:
Code
public static LeuteVO initialize (String name, String vorName, Date date) {
LeuteVO leuteVO = new LeuteVO();
leuteVO.name = name;
leuteVO.vorName = vorName;
leuteVO.geburtsTag = date;
return leuteVO;
}

// und weil du schlau bist überschreibst du auch die toString() Methode. 
public String toString() {
return "name=" + name + "\nvorName=" + vorName + "\geburtsTag=" + geburtsTag;
}

 
Wenn du nun die Daten aus Notes ausliest, kannst du das etwa so in die LeuteVO packen. Die LeuteVO packst du in den Vector.
(der Zugriff auf die Notes-Klassen geht vermutlich anders, bin jetzt zu faul da nachzugucken, ist dummy-code.

Code
Vector vecLeute = new Vector();

//do notes view stuff
Document doc = view.getFirstDocument();
while (doc != null) {
Document doc = view.getDocument();
// calling static factory-method.   
LeuteVO leuteVO = LeuteVO.initialize (doc.getStringItemValue("name"), doc.getStringItemValue("vorName"), doc.getDateItemValue("date"));

vecLeute.addElement(leuteVO);

doc = vw.getNextElement(doc);
}

// zum Spass mal am Ende ausdrucken....
System.out.println("vecLeute=" + vecLeute);


... so und später willst du das zwischengespeicherte auslesen.

geht dann so:
Code
displayData() {
LeuteVO leuteVO = null;
for (Enumeration el=vecLeute.elements(); el.hasMoreElements(); ) {
// casting notwendig....
       leuteVO = (LeuteVO)el.nextElement();
        showInUI(leuteVO.getName());
       showInUI(leuteVO.getVorname));
       showInUI (leuteVO.getGeburtsTag()); 
}

// wobei showInUI geschrieben werden müsste.

Ich hoffe das hilft dir weiter.
Wie gesagt, überleg dir ob es nicht vielleicht eine andere Lösung gibt.
« Letzte Änderung: 09.06.03 - 02:07:32 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #7 am: 09.06.03 - 10:53:28 »
Hi,


Klar könnte ich die Daten in einer Notes db zuerst aggregieren das würde aber bedeuten das ich die Daten redundant halte und bei jedem öffnen der view updaten müsste unter notes mit dbs größer 100000 docs ziemlich langsam.

aber mir geht es ja auch ums lernen.
Und meine erfahrung hat mir gezeigt das du eine Programmiersprache am besten lernst wenn du ein Ziel hast und versuchst dies Umzusetzen.
Vielleicht kommst es niemals zum Einsatz aber ich habe dabei dann doch recht viel gelernt ( Dank Leuten wie dir die gerne bereit sind Ihr wissen zu teilen).
Natürlich ist der Code am Anfang recht basic aber ich denke mit dem gelernten wird der doch relativ schnell besser.
Und beim nächsten mal weiß ich dann gleich wie es besser geht.
Und wie soll ich denn sonst JSp, Servlets und sonstiges machen wenn ich von den Basics noch keinen Plan habe :-))
Das mit dem vector muß ich mir anschauen sieht super interessant aus.


Danke
qojote

Offline qojote

  • Aktives Mitglied
  • ***
  • Beiträge: 229
  • I love YaBB 1G - SP1!
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #8 am: 09.06.03 - 11:06:26 »
Hups,

ich hab ein Teil deiner Fragen ja gar nicht beantwortet.

Alle haben repliken der entsprechenden Nfs.

Und noch ne frage :
// und weil du schlau bist überschreibst du auch die toString() Methode.  (vielleicht oute im mich jetzt als doof )
wieso überschreib ich die ??
Das war ne ganze Menge stuff jetzt muß ich mir erst mal ein Buch nehmen und die Sachen mit den Vektoren und gettern und settern nachlesen.

Danke
Qojote

Offline Axel_Janssen

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 769
Re:Probleme mit Applet das auf notes Daten zugreift
« Antwort #9 am: 09.06.03 - 11:49:57 »
Zitat
Und wie soll ich denn sonst JSp, Servlets und sonstiges machen wenn ich von den Basics noch keinen Plan habe

stimmt natürlich. Aber wie gesagt Applets sind wiederum überhaupt nicht basic, find ich jedenfalls
- Sicherheitsbeschränkungen
- Life-Cycle-Methoden --> hilft natürlich für Verständnis JSP, Servlets, EJBs).
- v.a. wenn du für browser entwickelst, gibt es bei Netscape, MS völlig andere Java-Versionen auf denen es laufen soll.
- Grafik-Bibliothek java.awt.* ist "uralt" und nicht das gelbe.

Für Servlets, JSPs gibts Tonnen von Literatur.

Auf der anderen Seite gebe ich dir völlig Recht, dass ein Verständnis von core-Java ziemlich grundlegend ist.

toString()-Methode:
ist ein ziemlich wichtiges Konzept, um einfach testbaren Code zu schreiben und Lehrreich in Hinblick auf OO-Vererbung.

Also: Jedes Objekt erbt von java.lang.Object (das steht zwar nicht in den Klassen, aber funktional ist es so).
D.h. zumindest die public-Methoden von java.lang.Object werden an die Java-Objekte aller Klassen vererbt.

Das Api-Doc sagt zur Methode
public String toString() in java.lang.Object:
Zitat
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

 getClass().getName() + '@' + Integer.toHexString(hashCode())


Die Methode wird beispielsweise von System.out.println() aufgerufen. Wenn du das Objekt z.B. zum Debuggen auf den Bildschirm drucken willst.
Die Methode in Object gibt den Klassennamen + @ + kryptisches Nümmerschen raus.
Das ist natürlich nicht so aussagekräftig. Weil in aller Regel willst du wissen, um was für ein Objekt es sich handelt.
Also überschreibst du die toString-Methode von Objekt und lässt das Objekt etwas aussagekräftigeres ausgeben (gerne wichtige Eigenschaften des Objekts, wie bei meinen Beispiel oben --> (dies ist ein grundlegendes Design-Prinzip, wenn man eigene Klassen schreibt. Macht jeder).
 
Viele Klassen aus dem jsdk überschreiben auch von Hause aus toString() --> z.B. Vector gibt die Elemente so aus:
[element1, element2, ..., elementn]
Probiers an eigenen code aus, ist ziemlich offensichtlich.
Kansst ja mal den code ausproieren und erst mit toString ausprobieren und dann toString in toStringUmbenannt ändern.

Axel

« Letzte Änderung: 09.06.03 - 11:52:27 von Axel_Janssen »
... design patterns are abstract designs that help identify the structure and elements involved in a specific design solution. From this, a concrete implementation can be produced.
Kyle Brown

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz