ok nach einer wilden und unstrukturierten debug-session (definitiv nicht mehr meine Art) habe ich so etwas wie ein Ergebnis.
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)).
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
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