Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JPopup heavy-lightweight-Err?

0 views
Skip to first unread message

rolf gabler

unread,
Dec 3, 2004, 1:26:02 PM12/3/04
to
Malzeit,
folgendes Problem würd ich gerne lösen:
Ich habe ein JApplet mit j3D Inhalten (Heavyweight),
wenn man einen rechtsclick auf eine beliebige JComponente macht
erscheint ein JPopupMenu.
Alles ist wunderbar wenn ich das applet im Browser laufen lasse
oder über folgendes main starte:
public static void main(String[] args) {
new MainFrame(new meinJ3DApplet(args,1), 1024, 768);
}

da ich aber das applet in einen anderen Frame integrieren will
habe ich das main zum checken mal umgebastelt :

public static void main(String[] args) {
JFrame mf=new JFrame(s1[0]);
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
public void windowClosed(WindowEvent e) {System.exit(0);}
};

mf.addWindowListener(l);

JPanel haupt = new JPanel();
haupt.setLayout(new BorderLayout());

String tabtitel=args[0];
ThreeDc ddc=new ThreeDc(args,1);
ddc.init() ;
mf.getContentPane().add(ddc);
mf.setSize(1024,768);
mf.show();
}

Das Programm startet und läüft wunderbar, auch die Popups gehen so
wie gewollt....
wenn ich jedoch einen Frame-resize per rechtsoben-rechteck-klicken
auf win2k ausführe, erhalte ich eine Fehlermeldung

java.lang.Error: Do not use ThreeDc.add() use
ThreeDc.getContentPane().add() ins
tead
at javax.swing.JApplet.createRootPaneException(JApplet.java:200)
at javax.swing.JApplet.addImpl(JApplet.java:222)
at java.awt.Container.add(Container.java:307)
at
javax.swing.PopupFactory$LightWeightPopup.show(PopupFactory.java:642)

at javax.swing.JPopupMenu.getPopup(JPopupMenu.java:803)
at javax.swing.JPopupMenu.setVisible(JPopupMenu.java:748)
at javax.swing.JPopupMenu.show(JPopupMenu.java:912)
at ThreeDc.checkPopupMenu(ThreeDc.java:2459)
at ThreeDc.mouseReleased(ThreeDc.java:2440)
at java.awt.Component.processMouseEvent(Component.java:5134)
at java.awt.Component.processEvent(Component.java:4931)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3639)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTh
read.java:197)
at
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThre
ad.java:150)
at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)

at
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)

Der Fehler passiert nicht wenn ich den Frame größer ziehe.... aber so
100% ig
ists auch nicht da der fehler auch schon (sehr selten)auftaucht wenn das
popup zuvor noch gar nicht aufgerufen wurde...bzw. oder auchmal nur wenn
das popup aufgerufen wird ohne das resized wurde... aber zu 99% ists wie
oben beschieben. Die FehlerZeile in dre Methode hab ich mal mi ### gemarkt

public void checkPopupMenu(MouseEvent event) {
if (event.isPopupTrigger()) {
JPopupMenu popup = new JPopupMenu();
JCheckBoxMenuItem jcheck = null;
for(int i=0;i<layeron.length;i++){
jcheck = new JCheckBoxMenuItem (layers[i][0]);
jcheck.addActionListener (this);
jcheck.setState(layeron[i]);
popup.add (jcheck);
popup.addSeparator();

}

//Menü anzeigen
###popup.show(event.getComponent(), event.getX(), event.getY());
}
}
gibts da evtl. probleme mit dem "sensitiven" bereich der Jcomponenten,
da natü der heavyweight j3d part auch vergrößert wird...widerspruch
hierbei jedoch, wieso mach dann fenster größer ziehen nix?

wäre für hilfreiche Anmerkungen und Lösungen sehr erfreut,
besten dank im vorraus
rolf


gabler-mieck

unread,
Dec 6, 2004, 3:46:06 AM12/6/04
to
puhh, OK... Lösung ist gefunden und denkbar simpel...
falls nochmal jemand die Frage haben sollte...
da j3d.utils nicht dokumentiert sind... (zumindest nicht in den 1.3.1docs)
MainFrame gehört zu j3d.utils.applet und kann wie folgt konstruiert werden:
Frame f=new MainFrame(new meinapplet(),width,height);
wodurch eigentlich die gesamte Frage ausgehebelt wird bzw. erklärbar ist...
besten dank an alle leser/-innen.
gruß
rolf

rolf gabler schrieb:

0 new messages