Panels im Applet

Wenn ich versuche mein Applet etwas übersichtlicher zu gestalten indem ich das Appletfenster mit Gridlayout aus verschiedenen Panels aufbaue, werden alle Paint-Aufrufe der Panels vom Internet Explorer und vom Navigator einfach ignoriert. Das Applet strahlt also in schönem grau :frowning: Im Appletviewer von Sun klappt es aber.
Liegt das an einer schlechten Implementierung der Browser, und weiß jemand wie ich das trotzdem hinbekomme?
schon mal danke
Hendrik

Servus,

bist du sicher, dass die Aufrufe ignoriert werden?
Hast du dir schon mal die Ausgaben der JAVA-Console angeschaut, ob es irgendeine Fehlermeldung gab?

Dirk

ich bin mir ziemlich sicher: wenn ich im Appletfenster nur ein einziges Panel einfüge und darin den Paint-code übernehme, der vorher funktioniert hat, wird nichts angezeigt in den Browsern, in dem Appletviewer funktioniert’s. Es werden auch keine Fehlermeldungen ausgegeben (weder vom Compiler noch vom Browser)

Servus,

ich meine keine Fehlermeldung des Browsers sondern die Ausgabe der Java-Console.
Was sagt die dann dazu?
Wenn z.B. Klassen nicht gefunden werden, werden hier die Fehlermeldungen ausgegeben.
Was hast du denn für ein Panel genommen? Beim JPanel kannst du in Probleme laufen, da Swing nicht von allen Browsern unterstützt wird. Meistens erst nach einer zusätzlichen Installation.

Dirk

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Dirk,
ehrlich gesagt weiß ich nicht genau was du meinst mit der Java-Console. Ich mache folgendes:

  • ich programmiere den Quellcode mit einem Editor (und benutze übrigens das panel java.awt.Panel)
  • ich kompiliere ihn mit javac (vom jdk 1.2), der keine Meldungen ausgibt
  • ich schaue mir das ergebnis mit dem appletviewer vom jdk an (da gibts keine weitere ausgabe in der eingabeaufforderung und es läuft) bzw. in einem browser (wo nichts geht)

Wo kommt dabei eine Console vor?

vielen Dank schon mal
Hendrik

Servus,

habe mal versucht, dein Problem nachzustellen. Bei mir geht folgender Code:

package test;

import java.awt.\*;
import java.awt.event.\*;
import java.applet.\*;

public class Applet1 extends Applet {
 boolean isStandalone = false;
 Panel panel1 = new Untitled1();
 GridLayout gridLayout1 = new GridLayout(2,1);
 Panel panel2 = new Untitled1();
 /\*\*Get a parameter value\*/
 public String getParameter(String key, String def) {
 return isStandalone ? System.getProperty(key, def) :
 (getParameter(key) != null ? getParameter(key) : def);
 }

 /\*\*Construct the applet\*/
 public Applet1() {
 }
 /\*\*Initialize the applet\*/
 public void init() {
 try {
 jbInit();
 }
 catch(Exception e) {
 e.printStackTrace();
 }
 }
 /\*\*Component initialization\*/
 private void jbInit() throws Exception {
 this.setSize(new Dimension(400,300));
 this.setLayout(gridLayout1);
 gridLayout1.setColumns(1);
 this.add(panel1, null);
 this.add(panel2, null);
 }
 /\*\*Get Applet information\*/
 public String getAppletInfo() {
 return "Applet Information";
 }
 /\*\*Get parameter info\*/
 public String[][] getParameterInfo() {
 return null;
 }
}

---

package test;

import java.awt.\*;

public class Untitled1 extends Panel {

 public Untitled1() {
 }

 public void paint(Graphics g) {
 g.drawString("Hallo", 10, 10);
 }

}

Ist das sehr viel anders, als deins?

Wo kommt dabei eine Console vor?

Die Java-Console ist ein Medium, um Ausgaben mit z.B. System.out.println() wiedergeben zu können. Unter anderem werden dort auch die Fehlermeldungen beim Laden eines Applets wiedergegeben.

Solltest du beim Testen von Applets im Browser also unbedingt verwenden. Der AppletViewer ist zwar ein erster guter Test, die Realbedingungen im Browser sind aber manchmal etwas anders (z.B. für Swing).

Beim IE4 kannst du die Console volgendermaßen aktivieren:

  • Ansicht->Internetoptionen
  • Tab Erweitert anwählen
  • Bei Java VM ein Häckchen bei Java-Console aktiviert machen

Nach Neustart des IE kannst du die Console und deren Ausgaben dann unter Ansicht->Java-Befehlszeile anschauen.

Dir

Hallo Dirk

der Tipp mit der Console hat mir wirklich weitergeholfen. Es gibt in der Tat eine Exception, allerdings eine für mich nicht erklärliche.
Wenn ich den Code um den es geht in dein Applet einsetze kommt im Wesentlichen das hier zur paint funktionhinzu:

public paint(Graphics g) {
 int height=this.getHeight();
 int width=this.getWidth();
 ...
}

Ich möchte die Maße des Panels kennen, um meine Paint-Ausgabe an der Appletgröße anzupassen (so dass ich nicht auf einer Größe festgelegt bin). Allerdings wird dieser Versuch in der Java-Konsole mit untenstehender Fehlermeldung bestraft. Laut Java-Spezifikation verfügt Panel aber über getHeight() und getWidth(), denn es erbt diese Methoden von der Klasse Component.
Hast du eine Ahnung wo mein Fehler liegt (wenn ich einen mache).
ciao
Hendrik

Exception occurred during event dispatching:
java.lang.NoSuchMethodError: java/awt/Component: method getHeight()I not found
at Untitled1.paint (Untitled1.java:19)
at com/ms/awt/WComponentPeer.doClearAndPaint (WComponentPeer.java)
at com/ms/awt/WComponentPeer.paintNode (WComponentPeer.java)
at com/ms/ui/windowmanager/PaintRequest.run (PaintRequest.java)
at com/ms/ui/windowmanager/RunnableMessage.run (RunnableMessage.java)
at com/ms/awt/WSystemQueue.getMessage (WSystemQueue.java)
at com/ms/awt/WEventQueue.getNextEvent (WEventQueue.java)
at java/awt/EventDispatchThread.run (EventDispatchThread.java)
Exception occurred during event dispatching:
java.lang.NoSuchMethodError: java/awt/Component: method getHeight()I not found
at Untitled1.paint (Untitled1.java:19)
at com/ms/awt/WComponentPeer.doClearAndPaint (WComponentPeer.java)
at com/ms/awt/WComponentPeer.paintNode (WComponentPeer.java)
at com/ms/ui/windowmanager/PaintRequest.run (PaintRequest.java)
at com/ms/ui/windowmanager/RunnableMessage.run (RunnableMessage.java)
at com/ms/awt/WSystemQueue.getMessage (WSystemQueue.java)
at com/ms/awt/WEventQueue.getNextEvent (WEventQueue.java)
at java/awt/EventDispatchThread.run (EventDispatchThread.java)

Servus Hendrik,

ist ne merwürdige Fehlermeldung.

Ich habe das mal bei mir versucht und da geht es.

Spasseshalber habe ich dann mal das Applet in ein JApplet umgewandelt und siehe da, es kam die von dir genannte Fehlermeldung. Auch das Applet selbst blieb grau.

Ändere bitte JApplet in Applet und schmeiss alle Referenzen auf Swing raus.

Dirk

1 „Gefällt mir“

hallo,
danke, werde es mal ausprobieren. ist trotzdem komisch. (aber es ist ja wichtiger eine lösung für den fehler zu finden als die ursache ewig zu suchen)
Hendrik