17. januar 2003 - 12:23Der 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.
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 );
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?
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(); }
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).
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.