Avatar billede archos Nybegynder
17. januar 2003 - 12:23 Der er 15 kommentarer og
1 løsning

2 klasser skal snakke sammen

Hey

Jeg har 2 klasser som skal kunne bruge methods fra hinanden, men jeg kan kun få dem til at snakke en vej.
Simplt eks.

Eks 1.
public class MyClass1 {
  String test = "THIS IS TEST"
  MyClass2 MyCla2 = new MyClass2();
 
  public String GetText() {
    return test;
  }

  public void printer2() {
    System.out.println(MyCla1.GetText());
  }
} //END MyClass1


public class MyClass2 {
  String test2 = "TESTING"
  MyClass1 MyCla1 = new MyClass1();

  public void printer() {
    System.out.println(MyCla1.GetText());
  }

  public String GetText() {
    return test2;
  }
}// END MyClass2

Dette giver følgende Exception, når jeg KØRE programmet:

Exception in thread "main" java.lang.StackOverflowError
at javax.swing.JComponent.repaint(JComponent.java:4320)
at java.awt.Component.repaint(Component.java:2363)
at javax.swing.JComponent.setBackground(JComponent.java:2276)
at javax.swing.LookAndFeel.installColors(LookAndFeel.java:58) at javax.swing.LookAndFeel.installColorsAndFont(LookAndFeel.java:92)
at javax.swing.plaf.basic.BasicPanelUI.installDefaults(BasicPanelUI.java:48)
at javax.swing.plaf.basic.BasicPanelUI.installUI(BasicPanelUI.java:39)
at javax.swing.JComponent.setUI(JComponent.java:445)
at javax.swing.JPanel.setUI(JPanel.java:132)
at javax.swing.JPanel.updateUI(JPanel.java:105)
at javax.swing.JPanel.<init>(JPanel.java:64)
at javax.swing.JPanel.<init>(JPanel.java:88)
at javax.swing.JPanel.<init>(JPanel.java:96)
at javax.swing.JRootPane.createGlassPane(JRootPane.java:467)
at javax.swing.JRootPane.<init>(JRootPane.java:298)
at javax.swing.JFrame.createRootPane(JFrame.java:253)
at javax.swing.JFrame.frameInit(JFrame.java:232)
at javax.swing.JFrame.<init>(JFrame.java:155)
at Gui.<init>(Gui.java:48)
at ActionMenu.<init>(ActionMenu.java:22)
at Gui.<init>(Gui.java:42)
at ActionMenu.<init>(ActionMenu.java:22)
...
..
Og sådan fortsætter den et godt stykke vej.
Avatar billede carstenknudsen Nybegynder
17. januar 2003 - 12:28 #1
Når du opretter et objekt af type MyClass1 oprettes
der et objekt af type MyClass2, hvorved der oprettes
et objekt af type MyClass1, hvorved der oprettes et
objekt af type MyClass2, hvorved, ... så tror jeg
du har fanget ideen. Hvis de to klasser skal
kende til hinanden kan du med fordel definere en
set metode der tager et argument af den anden klassetype
og så først oprette de to og dernæst fortæl dem om
hindandens eksistens.
MyClass1 c1 = new MyClass1();
MyClass2 c2 = new MyClass2();
c1.setFriend( c2 );
c2.setFriend( c1 );
Avatar billede di8leva Nybegynder
17. januar 2003 - 12:30 #2
et java.lang.StackOverflowError
betyder normalt at du har en klass (class1) der kaldern en anden klass (class2) som i sin tud kalder class1 som kalder class2 osv.....

hvordan bruger du dessa klasser? nogenstans anropar du printer() og printer2() metoden?
Avatar billede archos Nybegynder
17. januar 2003 - 12:38 #3
Ja jeg vist godt den går i loop, det var mere hvordan jeg kunne fikse det jeg var ude efter. :)

# Carsten,  eller hvilken som helst anden. ;)
Kan du give et lidt mere nybegynder venligt svar ;) men et lille eks. måske? det ville være nice.
Avatar billede archos Nybegynder
17. januar 2003 - 12:41 #4
Er det noget al'a dette:

public Class getClass() {
  return MyClass1;
}

eller er det helt i skoven?
Avatar billede arne_v Ekspert
17. januar 2003 - 13:15 #5
Jeg ville lave det som:

public class MyClass1 {
    private MyClass2 myclz2;
    public MyClass1() {
        myclz2 = new MyClass2(this);
    }
    // resten af metoderne
}

public class MyClass2 {
    private MyClass1 myclz1;
    public MyClass2(MyClass2 o) {
        myclz1 = o;
    }
    // resten af metoderne
}
Avatar billede arne_v Ekspert
17. januar 2003 - 13:16 #6
Så kan metoder i MyClass1 kalde med:
  myclz2.metodenavn
og metoder i MyClass2 kalde med:
  myclz1.metodenavn
Avatar billede arne_v Ekspert
17. januar 2003 - 13:19 #7
Det Carsten foreslår er:

public class MyClass1 {
    private MyClass2 myclz2;
    public MyClass1() {
    }
    public void setFriend(MyClass2 o){
        myclz2 = o;
    }
    // resten af metoderne
}

public class MyClass2 {
    private MyClass1 myclz1;
    public MyClass2() {
    }
    public void setFriend(MyClass1 o){
        myclz1 = o;
    }
    // resten af metoderne
}

Som kan bruges i de tilfælde hvor MyClass1 ikke skal
opretet MyClass2, men at de begge oprettes af en helt
tredie klasse.
Avatar billede arne_v Ekspert
17. januar 2003 - 13:20 #8
Der er en lille typo i mit 13:15:41 svar - det skal naturligvis være:

    public MyClass2(MyClass1 o) {
        myclz1 = o;
    }
Avatar billede archos Nybegynder
17. januar 2003 - 13:34 #9
# arne_v

Nu begynder der at ske noget. men!
Nu får jeg denne istedet, når jeg KØRE programmet ik compiler

Exception in thread "main" java.lang.NoSuchMethodError: Gui: method <init>()V no
t found
        at GuiMain.init(GuiMain.java:18)
        at GuiMain.main(GuiMain.java:12)

Jeg har min "main" i en 3, klasse som kalder MyClass1() sådan.

public class GuiMain {
    private static MyClass1 window;
    private static GuiMain theApp;


    public static void main(String[] args) {
        theApp = new GuiMain();
        theApp.init();
    }


    public void init() {

        window = new MyClass1();

        Toolkit theKit = window.getToolkit();
        Dimension wndSize = theKit.getScreenSize();

        window.addWindowListener(new WindowHandler());
        window.setBounds(wndSize.width / 5, wndSize.height / 5, wndSize.width / 2 + 200, wndSize.height / 2 + 200);
        window.setVisible(true);
    }

Nogen foreslag?

ps. det er ik de rigtige klasse navne bare rolig ;)
Avatar billede arne_v Ekspert
17. januar 2003 - 13:37 #10
Har du samme classpath når du kører som når du compiler ?
Avatar billede archos Nybegynder
17. januar 2003 - 13:39 #11
jeg sætter ik nogen :

javac MyClass1.java
...
..

java GuiMain
...
..
Avatar billede arne_v Ekspert
17. januar 2003 - 15:19 #12
Det lyder mere som et decideret GUI problem end som
er MyClass1-MyClass2 problem.

Kan du poste hele koden ?
Avatar billede archos Nybegynder
17. januar 2003 - 16:02 #13
øøhh faktisk har jeg 5 klasser og næsten 1000 liniers kode, :) så det bliver nok lige svært.
Avatar billede arne_v Ekspert
17. januar 2003 - 16:04 #14
Du kan evt. email til arne_v@mail.danbbs.dk, så kan jeg prøve og køre
dem (forudsætter at de kan køre hos mig og kræve adgang til en database
eller lignende).
Avatar billede archos Nybegynder
17. januar 2003 - 16:06 #15
oki, jeg sender dem bare i en zip eller rar?, det kan godt køre uden db,
Avatar billede arne_v Ekspert
17. januar 2003 - 16:09 #16
ZIP tak !
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