Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JAVA] waarden tussen methoden wordt niet meegegeven

Pagina: 1
Acties:

  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Ik zit (weer) met een vreselijk frustrerend probleem, en waar ik nog het meeste van baal is dat ik er na 4 uur nog niet uit ben.

Ik heb nu 3 klassen met elkaar communiceren

GUI (opbouw van de GUI en regeling van actionlisteners)
WriteController (ophalen van bestandsnaam, directory, en mogelijkheid om te schrijven)
WriteDataHTML (het schrijven van data uit de tabel naar een html bestand)

Waar het probleem zit.. ik roep de tabelgegevens aan vanuit de GUI, direct naar WriteDataHTML
Gegevens van het ophalen van de bestandsnaam en directory wordt vanuit de GUI (actionlistener) via de WriteController (ophalen gegevens) naar de WriteDataHTML gestuurd.
In principe is de WriteDataHTML in het bezit van de gegevens om een html bestand weg te schrijven.

Hier loopt het echter vast

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public void Basis(JTable table, String[] columns, int rows,
                      String date) {

        tableHTML = table;
        columnsHTML = columns;
        rowsHTML = rows;
        dateHTML = date;
        
        System.out.println("DEBUG: Basis Rowcount; " + rowsHTML);
        System.out.println("DEBUG: Basis Column; " + columnsHTML[0]);

    }

    public void wegSchrijven(String strSavepath, String strHTMLFileName) {
        System.out.println("DEBUG: wegSchrijven Rowcount; " + rowsHTML);
        System.out.println("DEBUG: wegSchrijven Column; " + columnsHTML[0]);

de printlines in de methode Basis() worden correct geprint, dezelfde printlines in de methode wegSchrijven geven respectievelijk 0 en NullPointerException.

Dit zijn 2 methoden binnen de WriteDataHTML, welke bij elkaar de gegevens bevatten. de methode wegSchrijven() voert daadwerkelijk het schrijven uit. De gegevens die hij via de Controller krijgt komen correct binnen, de tabelgegevens krijgt de klasse via de methode Basis() binnen.
Nu lijkt het echter alsof de variabelen van Basis() niet bij wegSchrijven() naar binnen kunnen.
Alle variabelen zijn in de Constructor als private gedeclareerd.

Ik heb hetzelfde idee gedaan met 2 testklassen en het binnenhalen van variabele gegevens van methode1 naar methode2 is toen wel gelukt...

Er zal wel weer ergens een domme fout in zitten, maar dat ben ik nu wel gewend :X

[ Voor 3% gewijzigd door Teeno op 07-09-2007 17:03 ]


Verwijderd

Ik kan hier geen fout vinden (of ik kijk er ook overheen :) )

Waarschijnlijk zit de fout in de aanroep. Weet je zeker dat je de methoden Basis en wegSchrijven op hetzelfde object aanroept? Is er geen andere methode die je aanroept de variabelen weer leegmaakt/op null zet?

  • Mammon
  • Registratie: December 2006
  • Laatst online: 23-11 13:55
roep je basis voor wegschrijven aan?
anders staat er niks in de variabelen.

  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Verwijderd schreef op vrijdag 07 september 2007 @ 17:08:
Ik kan hier geen fout vinden (of ik kijk er ook overheen :) )

Waarschijnlijk zit de fout in de aanroep. Weet je zeker dat je de methoden Basis en wegSchrijven op hetzelfde object aanroept? Is er geen andere methode die je aanroept de variabelen weer leegmaakt/op null zet?
Ik zal je bij deze voorzien in wat extra informatie

Dit is de aanroepcode vanuit de GUI;
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
        jbtSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                periodControle();
                // Als de period goed is ingevuld
                if (strPeriod != strNoPeriod) {
                    // Geef de tabel, kolomnamen, aantal rijen en datum mee naar de klasse WriteDataHTML
                    html.Basis(table, kolomnamen(), aantal_rijen(), getDate());
                    Control.Writing(returnDate(), schipnaam);

                }
            }
        });
    }

Tussen deze 2 aanroepen heb ik nog een Thread.sleep(1000); gezet, zonder resultaat
html.Basis.... geeft de tabeldata direct door aan WriteDataHTML
Control.Writing... geeft gegevens aan WriteController die die klasse nodig heeft om de directory en bestandsnaam te pakken, deze wordt ook prima geprint

aanroep vanuit WriteController

Java:
1
2
3
        shipnameController = shipname;
        dateController = datum;
        writeHTML.wegSchrijven(strSavepath, getFileNameHTML());

Deze code wordt op zijn beurt ook zonder problemen geprint vanuit de WriteDataHTML, het enige wat hij dus niet doet is binnen de klasse de tabelgegevens door te geven

[ Voor 16% gewijzigd door Teeno op 07-09-2007 17:22 ]


Verwijderd

is 'html' in de GUI dezelfde instantie als writeHTML in de WriteController?

Waarschijnlijk gebruik je twee apparte instanties van WriteDataHTML.

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:45
Daar zit ook aan te denken, en is eigenlijk ook de enige logische verklaring. Maar verder ben je me echt helemaal kwijt..
Probeer wat netter te werken, ik zie al engels en nederlands door elkaar, kleine en grote letters voor variabelen en functies.
Verder denk ik dat je misschien veel te ingewikkeld bezig bent.
Voorbeeldje van alle bovenstaande in twee regels:
Java:
1
2
html.Basis(table, kolomnamen(), aantal_rijen(), getDate()); 
Control.Writing(returnDate(), schipnaam); 

Twee verschillende objecten (of een Control is een static method, kan ik zo niet zien) om één (toch niet al te ingewikkeld) doel te bereiken (denk ik).

[ Voor 13% gewijzigd door sig69 op 07-09-2007 17:31 ]

Roomba E5 te koop


  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Is het misschien verstandig om de Control eruit te halen en alles vanuit de GUI te doen? Het gaat om nog geen 100 regels maar het leek me overzichtelijker... code optimaliseren wilde ik van het weekend gaan doen als de functionaliteit compleet is

Verwijderd

Teeno schreef op vrijdag 07 september 2007 @ 17:36:
Is het misschien verstandig om de Control eruit te halen en alles vanuit de GUI te doen? Het gaat om nog geen 100 regels maar het leek me overzichtelijker... code optimaliseren wilde ik van het weekend gaan doen als de functionaliteit compleet is
NEEEE!!! :D

Het scheiden van GUI-code van je logica is (bijna) altijd een goed idee. Afgezien daarvan zou ik je programma ook niet willen omschrijven als 'overzichtelijk'. Zoals sig69 al aangaf is het waarschijnlijk een goed idee om je naamgeving te verbeteren.

Terug naar je probleem. Als ik zeg dat ik vermoed dat je twee apparte instanties van de klasse WriteDataHTML aanroept, heb je dan enig idee wat ik bedoel :). Als het antwoord nee is dan is het misschien verstandig je nog een keertje goed te verdiepen in de materie

  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Verwijderd schreef op vrijdag 07 september 2007 @ 17:49:
[...]


NEEEE!!! :D

Het scheiden van GUI-code van je logica is (bijna) altijd een goed idee. Afgezien daarvan zou ik je programma ook niet willen omschrijven als 'overzichtelijk'. Zoals sig69 al aangaf is het waarschijnlijk een goed idee om je naamgeving te verbeteren.

Terug naar je probleem. Als ik zeg dat ik vermoed dat je twee apparte instanties van de klasse WriteDataHTML aanroept, heb je dan enig idee wat ik bedoel :). Als het antwoord nee is dan is het misschien verstandig je nog een keertje goed te verdiepen in de materie
Wat ik uit de info op kan maken bedoel je dit?

WriteController:
Java:
1
    private WriteDataHTML writeHTML = new WriteDataHTML();


GUI:
Java:
1
    private WriteDataHTML html = new WriteDataHTML();


Toch heb ik het vermoeden dat je dit niet bedoelt

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 30-11 11:35

Janoz

Moderator Devschuur®

!litemod

Je maakt nu twee verschillende instanties van het WriteDataHTML object aan. In tegenstelling tot wat jij denkt zijn dat dus niet dezelfde objecten. Je zult 1x een nieuw object moeten maken en deze vervolgens doorgeven aan WriteController en GUI.

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


  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Janoz schreef op vrijdag 07 september 2007 @ 19:18:
Je maakt nu twee verschillende instanties van het WriteDataHTML object aan. In tegenstelling tot wat jij denkt zijn dat dus niet dezelfde objecten. Je zult 1x een nieuw object moeten maken en deze vervolgens doorgeven aan WriteController en GUI.
Sorry dat ik dit vraag, maar zou je een stukje voorbeeldcode kunnen geven hoe ik dit het best kan doen? i.t.t. veel andere functies kan ik hierover niets vinden op google, dit is ook iets wat ik niet eerder heb meegemaakt dus als ik het één keer zie heb ik het er wel in zitten :$

  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Teeno schreef op zaterdag 08 september 2007 @ 12:33:
[...]

Sorry dat ik dit vraag, maar zou je een stukje voorbeeldcode kunnen geven hoe ik dit het best kan doen? i.t.t. veel andere functies kan ik hierover niets vinden op google, dit is ook iets wat ik niet eerder heb meegemaakt dus als ik het één keer zie heb ik het er wel in zitten :$
schopje...

  • geforce5_guy
  • Registratie: December 2001
  • Niet online
Als je iets maar 1 object van een class wil hebben kan je het in singleton maken.
Hoe dat moet is via google te vinden. Het is makkelijk te maken.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 28-11 23:34

NetForce1

(inspiratie == 0) -> true

geforce5_guy schreef op zondag 09 september 2007 @ 16:56:
[...]


Als je iets maar 1 object van een class wil hebben kan je het in singleton maken.
Hoe dat moet is via google te vinden. Het is makkelijk te maken.
Dat lijkt me hier totaal niet van toepassing, en gezien het niveau van ts een beetje hoog gegrepen. Het is natuurlijk niet zo moeilijk om een singleton te maken, maar het volledig begrijpen en doorzien van de gevolgen van het gebruik ervan is nog een ander verhaal.
Je moet, zoals al eerder gezegt, de variabele html in je action listener meegeven aan Control.Writer (op dezelfde manier als strSavepath meegegeven wordt)

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


  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
Ik denk dat ik het (met jullie hulp uiteraard) heb opgelost. Ik heb in de GUI éénmalig een instantie aangemaakt van de klasse WriteDataHTML, deze meegegeven naar de Controller en hiervandaan de klasse aangeroepen.. misschien niet helemaal de correcte manier.. maar het komt wel goed zo.

bedankt weer :)

  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 28-01 13:12

jAnO!

lalalavanillevla

Even een tipje, ik zag in een eerdere posting dat je al een jaar bezig bent met JAVA. Wellicht is het dan een idee om een keer een goed boek te lezen, want stiekem denk ik dat je dat nog niet hebt gedaan.

Tip van Jan:
Head first JAVA

of Thinking in JAVA van Eckel, maar die is misschien weer net te advanced.

succes verder iig..

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.


  • Teeno
  • Registratie: Juni 2007
  • Laatst online: 19-11 12:23
jAnO! schreef op maandag 10 september 2007 @ 15:22:
Even een tipje, ik zag in een eerdere posting dat je al een jaar bezig bent met JAVA. Wellicht is het dan een idee om een keer een goed boek te lezen, want stiekem denk ik dat je dat nog niet hebt gedaan.

Tip van Jan:
Head first JAVA

of Thinking in JAVA van Eckel, maar die is misschien weer net te advanced.

succes verder iig..
Ik ben zelf van mening dat dit een effectievere leermethode is, ik heb trouwens het boek "Introduction to JAVA Programming - Y. Daniel Lliang" maanden gebruikt voor de basis.

[ Voor 7% gewijzigd door Teeno op 10-09-2007 15:42 ]


  • jAnO!
  • Registratie: Januari 2002
  • Laatst online: 28-01 13:12

jAnO!

lalalavanillevla

Kijk moet je zelf weten, maar geloof me in 3 hoofdstukken head first leer je meer dan van dat hele boek wat je nu gebruikt. Lees de reviews...

check ook eens www.javaranch.com, het forum imho voor beginnende javanen.
probeer de "rules round up" eens, weet je beetje waar je staat kwa begrip syntax enzo.

When some people work at a place for ten years they get ten years of experience, other people work at a place for ten years and get one year of experience ten times.

Pagina: 1