[java] comuniceren tussen JFrames

Pagina: 1
Acties:

  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 16-05 03:15
Ik ben bezig met het maken van een applicatie, deze applicatie kent 2 frrames

een Control-frame (extends JFrame)
een Beam-frame (extends JFrame)

Op het moment heb ik twee monitoren aangesloten op mijn systeem uiteindelijk moet dat een beamer worden.

De beam-frame staat fullscreen op mijn ene monitor de control-frame is een gewoon venster en staat op mijn andere monitor..

Het is de bedoeling dat van uit het control-Frame bepaald wordt wat er gebeamed moet worden, ook zijn er op het Control-frame twee knopjes om te kunnen scrollen op het beam-frame, zo is niet te zien wat er gecontroleerd, althans voor het public, maar kan er bijvoorbeeld wel gescrolled worden.

het Control-frame heeft een instantie van het beam-frame, alleen nu is het probleem het volgende.. Op het moment dat er vanuit de Control-frame - bijvoorbeeld door een listener - een methode van het beam-frame word aangeroepen krijg ik een hele lijst thread-gerelateerde fout meldingen:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Java.lang.NullPointerException
            at 
 Control$beamStatusListener.actionPerformed(Control.java:245
           )
            at javax.swing.AbstractButton.fireActionPerformed(Unknown
           Source)
            at
           javax.swing.AbstractButton$ForwardActionEvents.actionPerfor
           med(Unknown Source)
            at
           javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
           Source)
            at javax.swing.DefaultButtonModel.setPressed(Unknown
           Source)
            at
           javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Un
           known Source)
            at java.awt.Component.processMouseEvent(Unknown Source)
            at java.awt.Component.processEvent(Unknown Source)
            at java.awt.Container.processEvent(Unknown Source)
            at java.awt.Component.dispatchEventImpl(Unknown Source)
            at java.awt.Container.dispatchEventImpl(Unknown Source)
            at java.awt.Component.dispatchEvent(Unknown Source)
            at
           java.awt.LightweightDispatcher.retargetMouseEvent(Unknown
           Source)
            at
           java.awt.LightweightDispatcher.processMouseEvent(Unknown
           Source)
            at java.awt.LightweightDispatcher.dispatchEvent(Unknown
           Source)
            at java.awt.Container.dispatchEventImpl(Unknown Source)
            at java.awt.Window.dispatchEventImpl(Unknown Source)


Is er iemand die mij kan helpen??

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15-05 08:48

Janoz

Moderator Devschuur®

!litemod

Het wordt een stuk makkelijker waneer er wat relevante code gepost wordt.

Wat je eigenlijk zou moeten doen is je buisness scheiden van je view. Waneer je zelf een controler class maakt kun je van daaruit bijde frames aansturen. Je daadwerkelijke functionaliteit implementeer je dan in deze controler.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 16-05 03:15
De code van de button listener (deze button moet zorgen voor het scrollen)

Java:
1
2
3
4
5
6
7
private class beamScrollUpListener implements ActionListener    {
        
    public void actionPerformed(ActionEvent e) {        
        
        beamGui.scrollUp();     
    }
}

Dit is een innerclas van Control

De volgende code zit in Beam (beamGui is een object Beam) (gewoon een methode in Beam)
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void scrollUp() {
        
    JViewport viewPort = scrollPane.getViewport();
    Point old_position = viewPort.getViewPosition();
    Double x_value = new Double(old_position.getX());
    Double y_value = new Double(old_position.getY());
    Double height = new Double(100.0);
                    
    if(y_value.compareTo(height) >= 0) {
        Point new_postition = new Point(x_value.intValue(),y_value.intValue()-100);
        viewPort.setViewPosition(new_postition);
    }
    else
     {
        Point new_postition = new Point(x_value.intValue(),0);
        viewPort.setViewPosition(new_postition);
    }
}

Deze scrollfunctie werkt, als ik een button op de beamGui heb gaat het goed.. Maar op het moment dat die action listener wordt aangeroepen, krijg ik die lijst van errors

  • FendtVario
  • Registratie: Januari 2002
  • Laatst online: 12-05-2025

FendtVario

The leader drives Vario!

In je eerste post staat een regelnummer waarop de exception opgegooid werd. Welke regel is dat in je code. Null pointer exception betekent dat het object wat je probeert aan te roepen nog niet geinistialiseerd is.

Je kunt [code=java] en [/code] tags om je code heen zetten voor een overzichtelijke post en syntax highlighting

www.fendt.com | Nikon D7100 | PS5


  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 16-05 03:15
Ik weet dat ik eenn nulpointer krijg..

het probleem is dat ik geen enkel idee waarom ik die null-pointer krijg

Java:
1
2
3
4
5
6
private class beamScrollUpListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

beamGui.scrollUp();
}



bij het aanroepen van beamGui.scrollUp() krijg ik exception.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

Dat zou betekenen dat beamGui niet geinitialiseerd is.

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 16-05 03:15
maar dat is niet zo..

Java:
1
2
3
4
5
6
7
8
DisplayMode screen = beamDevice.getDisplayMode();                   
Beam beamGui = new Beam(fullList, screen, beamDevice);
beamDevice.setFullScreenWindow(beamGui);
beamGui.setVisible(true);       
beamStatus = true;
beamScrollDown.setEnabled(true);
beamScrollUp.setEnabled(true);
beamStatusButton.setText("Uitzetten");      


deze code laat overduidelijk een beamGui verschijnen op de andere monitor. Dus hij is wel geinit.

Ik krijg bij het uitvoeren van deze errors ook geen melding..,

[ Voor 9% gewijzigd door martijnvanegdom op 25-01-2005 16:48 ]


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 23-03 10:29

NetForce1

(inspiratie == 0) -> true

hm strange, beamScrollUpListener kan wel bij andere velden/methoden van Controlframe?

offtopic:
Klassenamen worden in Java altijd met een hoofdletter begonnen

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Test eens in je actionPerformed event of beamGUI null is. Gewoon voor de gein. Als jij zegt dat hij geinitialiseerd is, laten we dan eens kijken wat de JVM ervan vindt.

  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 16-05 03:15
NetForce1 schreef op dinsdag 25 januari 2005 @ 16:53:
hm strange, beamScrollUpListener kan wel bij andere velden/methoden van Controlframe?

offtopic:
Klassenamen worden in Java altijd met een hoofdletter begonnen
Jep - beamScrollUpListener is een innerclass van Controleframe

offtopic:
naampje van class is Control en de bestandsnaam Control.java

[ Voor 15% gewijzigd door martijnvanegdom op 25-01-2005 17:59 ]


  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 16-05 03:15
bigbeng schreef op dinsdag 25 januari 2005 @ 16:59:
Test eens in je actionPerformed event of beamGUI null is. Gewoon voor de gein. Als jij zegt dat hij geinitialiseerd is, laten we dan eens kijken wat de JVM ervan vindt.
Als ik in de functie waar beamGui word geinit dan krijg ik netjes
Java:
1
Beam[frame0,0,0,1024x768,layout=java.awt.BorderLayout,title=,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,1024x768,layout=javax.swing.JRootPane$RootLayout,alignmentX=null,alignmentY=null,border=,flags=385,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]


in de actionPerformed is beamGui null.. Maar dat is raar, want beide zitten in een innerclas van Contor,. In van de fields van Control is private Beam beamGui;
misschien als tie public is werkt het maar ik vind het nog steeds een beetje raar.

ook met public maakt het niets uit..

[ Voor 4% gewijzigd door martijnvanegdom op 25-01-2005 18:06 ]


  • martijnvanegdom
  • Registratie: Januari 2004
  • Laatst online: 16-05 03:15
Ik heb nu een getBeamGui() en een setBeamGui() in de Control Class gebouwd, het lijkt nu te werken!

Het is wel heel erg gek, dat een innerclas niet bij de fields van de class kan, dit moet gewoon kunnnen, maar In ieder geval heel hartelijk bedankt!!

[ Voor 28% gewijzigd door martijnvanegdom op 25-01-2005 18:18 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 16-05 11:55

Robtimus

me Robtimus no like you

Martijnvanegdom schreef op dinsdag 25 januari 2005 @ 16:47:
maar dat is niet zo..

Java:
1
2
3
4
5
6
7
8
DisplayMode screen = beamDevice.getDisplayMode();                   
Beam beamGui = new Beam(fullList, screen, beamDevice);
beamDevice.setFullScreenWindow(beamGui);
beamGui.setVisible(true);       
beamStatus = true;
beamScrollDown.setEnabled(true);
beamScrollUp.setEnabled(true);
beamStatusButton.setText("Uitzetten");      


deze code laat overduidelijk een beamGui verschijnen op de andere monitor. Dus hij is wel geinit.

Ik krijg bij het uitvoeren van deze errors ook geen melding..,
Volgens mij maak je hier een lokale variable beamGui, die het veld met dezelfde naam maskeert:
Java:
1
Beam beamGui = new Beam(fullList, screen, beamDevice);

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 16-05 11:55

Robtimus

me Robtimus no like you

Martijnvanegdom schreef op dinsdag 25 januari 2005 @ 18:17:
Ik heb nu een getBeamGui() en een setBeamGui() in de Control Class gebouwd, het lijkt nu te werken!

Het is wel heel erg gek, dat een innerclas niet bij de fields van de class kan, dit moet gewoon kunnnen, maar In ieder geval heel hartelijk bedankt!!
Kan wel, zolang de inner class niet static is. Je kunt ze dan op de gewone manier aanspreken, of als hij wordt gemaskeerd door een lokale var door de aanroep
Java:
1
OuterClass.this.fieldName

More than meets the eye
There is no I in TEAM... but there is ME
system specs

Pagina: 1