Avatar billede trp79 Nybegynder
10. september 2003 - 21:01 Der er 9 kommentarer og
1 løsning

Sende reference til det aktuelle objekt over i andet objekt

Hejsa,
her kommer lige lidt basalt jeg ikke fatter...

Hvis jeg har en klasse Main.java hvori main metoden ligger.
I Main.java oprettes et objekt af klassen A. I klassen A skal en reference til objektet A så sendes til en instans af klassen B
Hvordan gør jeg det? og hvorfor kan jeg ikke sende "this"?

lidt psudo..

i main.java:
A a = new A();

I A
ved tryk på knap gør
B b = new B(this)://altså reference til objektet A

Mvh
Torben
Avatar billede arne_v Ekspert
10. september 2003 - 21:03 #1
Det bør du også kunne gøre !
Avatar billede arne_v Ekspert
10. september 2003 - 21:09 #2
Det her compiler fint hos mig:

public class A {
    private B b = null;
    public void addB() {
        b = new B(this);
    }
    public static void main(String[] args) {
        A a = new A();
        a.addB();
    }
}

class B {
    private A a;
    public B(A a) {
        this.a = a;
    }
}
Avatar billede trp79 Nybegynder
11. september 2003 - 07:54 #3
Når det går vist ikke så godt for exp's db. Men jeg fik heldigvis læst dit svar og dit eksempel igår...

Jeg mener nemlig heller ikke der er noget galt med min kode, men den brokker sig... jeg får denne fejl:
constructor Download(java.awt.Frame, boolean, Metoder, java.util.ArrayList, java.util.ArrayList, java.util.ArrayList, java.util.ArrayList, Rasmus$49) not found in class Download

og Downlaod.java's konstuktør ser således ud:
public Download(java.awt.Frame parent, boolean modal, Metoder m, ArrayList firmaListe, ArrayList kPListe, ArrayList omsListe, ArrayList budgetListe, Rasmus rasmus)

Min Rasmus.java er en meget stor fil - er det fordi den bliver delt op(den skriver jo Rasmus$49) at det ikke vil funke?
Avatar billede trp79 Nybegynder
11. september 2003 - 07:55 #4
sådan her bliver Download oprettet i Rasmus.java:
Download dw = new Download(myself, true, m, firmaListe, kPListe, omsListe, budgetListe, this);
Avatar billede trp79 Nybegynder
11. september 2003 - 20:22 #5
Det er ved et kald fra et JMenuItem jeg får fejlen, altså

private JMenuItem downloadItem;
...
downloadItem = new JMenuItem("Download Backup");
downloadItem.setEnabled(true);
downloadItem.addActionListener(new ActionListener()
  {
      public void actionPerformed(ActionEvent event)
      {
        Download dw = new Download(myself, true, m, firmaListe, kPListe, omsListe, budgetListe, this);
        dw.setSize(445,440);
        dw.show();
      }
});

Når skriver this. for at se hvilke forslag JDev903 kommer med, så kommer den ikke med klassen variabler, metoder osv. men skriver selv "this.actionPerformed()"

Du har ikke en ide til hvad der kan være galt?
Avatar billede arne_v Ekspert
11. september 2003 - 20:39 #6
Det sidste argument i Download constructoren skal være en Rasmus.

Men du kalder faktisk med en anonym klasse der extender ActionListener !
Avatar billede trp79 Nybegynder
11. september 2003 - 21:41 #7
Du har ret Arne, nu funker det - så hvis du vil smide et svar :)
Måske jeg skulle se at re-kontruere den klasse... ikke fedt at tabe overblikket på en klasse der indeholder 2300 linier...

Tak for hjælpen

Mvh
Torben
Avatar billede arne_v Ekspert
11. september 2003 - 21:44 #8
svar
Avatar billede arne_v Ekspert
11. september 2003 - 21:44 #9
2300 linier ?

Det er vist på høje tid at få den splittet op !
Avatar billede trp79 Nybegynder
12. september 2003 - 10:27 #10
Ja, der skal gøre noget ved den! Og eftersom jeg har problemer med selv at finde rundt i den, så er der nogle alarm klokker der er ved at ringe her.... :)

Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester