treaki Posted May 27, 2012 at 06:26 PM Share Posted May 27, 2012 at 06:26 PM hi, ich bin noch relativ neu in java und versuche ein grafisches (swing) tinkerforge programm zu schreiben. oben im fenster befinden sich 2 Felder für host und port und ein button der je nach status connect oder disconnect anzeigt. mein problem ist allerdings dass ich es nicht hinkriege eine globale ipconnection aufzubauen die in der ganzen klasse läuft. kann mir da jemand helfen?? codschnipsel: final JButton btnConnect = new JButton("connect"); btnConnect.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("connect/disconnect button pressed"); System.out.println("connection="+connection); IPConnection ipcon = null; if(connection==false){ System.out.println("start connecting"); btnConnect.setText("connecting..."); host=txthostename.getText(); port=Integer.parseInt( txtport.getText()); // Note: To make the example code cleaner we do not handle exceptions. Exceptions you // might normally want to catch are described in the comments below // Create connection to brickd try{ ipcon = new IPConnection(host, port); // Can throw IOException //System.out.println("Press ctrl+c to exit"); lblDisconnected.setText("Connected"); btnConnect.setText("disconnect"); connection=true; }catch (IOException e1){ lblDisconnected.setText("connection failed, Disconnected"); btnConnect.setText("connect"); connection=false; } // Register enumerate listener and print incoming information ipcon.enumerate(new IPConnection.EnumerateListener() { public void enumerate(String uid, String name, short stackID, boolean isNew) { if(isNew) { System.out.println("New device:"); if(name.startsWith("Distance IR Bricklet")){ } } else { System.out.println("Removed device:"); } System.out.println(" Name: " + name); System.out.println(" UID: " + uid); System.out.println(" Stack ID: " + stackID); } }); //ipcon.joinThread(); System.out.println("ending connecting"); } else{ System.out.println("starting disconnecting"); ipcon.destroy(); lblDisconnected.setText("Disconnected"); btnConnect.setText("connect"); connection=false; System.out.println("ending disconnecting"); } System.out.println("connection="+connection); System.out.println("end of connect/disconnect button handler"); } }); ausgabe dess programms: connect/disconnect button pressed connection=false start connecting ending connecting connection=true end of connect/disconnect button handler New device: Name: Master Brick 1.0 UID: xxx Stack ID: 1 New device: Name: Distance IR Bricklet 1.0 UID: xxx Stack ID: 2 connect/disconnect button pressed connection=true starting disconnecting Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at main.Main$2.actionPerformed(Main.java:178) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253) at java.awt.Component.processMouseEvent(Component.java:6136) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:5901) at java.awt.Container.processEvent(Container.java:2105) at java.awt.Component.dispatchEventImpl(Component.java:4497) at java.awt.Container.dispatchEventImpl(Container.java:2163) at java.awt.Component.dispatchEvent(Component.java:4323) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055) at java.awt.Container.dispatchEventImpl(Container.java:2149) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4323) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649) at java.awt.EventQueue.access$000(EventQueue.java:96) at java.awt.EventQueue$1.run(EventQueue.java:608) at java.awt.EventQueue$1.run(EventQueue.java:606) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116) at java.awt.EventQueue$2.run(EventQueue.java:622) at java.awt.EventQueue$2.run(EventQueue.java:620) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105) at java.awt.EventQueue.dispatchEvent(EventQueue.java:619) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177) at java.awt.EventDispatchThread.run(EventDispatchThread.java:138) Quote Link to comment Share on other sites More sharing options...
dove Posted May 27, 2012 at 09:23 PM Share Posted May 27, 2012 at 09:23 PM Es ist einfacher wenn du den Actionlistener implementierst, als eine InnerClass zu schreiben. das wäre: class MyClass implements ActionListener { ... } Dazu musst du die Methoden, die du jetzt in der InnerClass definiert hast, in deine Klasse kopieren. Dann machst du eine Klassenvariable deiner Klasse von Typ IPConnection und dann hast das was du willst. Quote Link to comment Share on other sites More sharing options...
treaki Posted May 28, 2012 at 11:10 AM Author Share Posted May 28, 2012 at 11:10 AM Actionlistener?? InnerClass?? sorry dass ich so unbedarft frage aber gibts da ein tutorial was mir als c programmierer (ohne objectorientierte kentnisse) erklärt wie das leuft?? gruß Quote Link to comment Share on other sites More sharing options...
AuronX Posted May 29, 2012 at 04:15 PM Share Posted May 29, 2012 at 04:15 PM Folgender Code stammt von dir: ipcon.enumerate(new IPConnection.EnumerateListener() { public void enumerate(String uid, String name, short stackID, boolean isNew) { if(isNew) { System.out.println("New device:"); if(name.startsWith("Distance IR Bricklet")){ } } else { System.out.println("Removed device:"); } System.out.println(" Name: " + name); System.out.println(" UID: " + uid); System.out.println(" Stack ID: " + stackID); } }); //ipcon.joinThread(); Das ist auseinandergefummelt einmal der Code drumerhum: ipcon.enumerate(DER_TEIL_INNEN_DRIN); //ipcon.joinThread(); und eben der Teil innen drin: new IPConnection.EnumerateListener() { public void enumerate(String uid, String name, short stackID, boolean isNew) { if(isNew) { System.out.println("New device:"); if(name.startsWith("Distance IR Bricklet")){ } } else { System.out.println("Removed device:"); } System.out.println(" Name: " + name); System.out.println(" UID: " + uid); System.out.println(" Stack ID: " + stackID); } } Den Teil innen drin nennt man anonyme Klasse, weil du eine ganze Klasse definierst ohne ihr einen Namen zu geben. Wenn du ihr einen Namen geben willst, dann kannst du den inneren Code irgendwo anders hinschreiben und statt new IPConnection.EnumerateListener() schreibst du dann eben class MeineNeueKlasse implements ActionListener (oder müsste das statt ActionListener eher IPConnection.EnumerateListener sein?) Der dazu passende äußere Code wäre dann ipcon.enumerate(new MeineNeueKlasse()); //ipcon.joinThread(); Quote Link to comment Share on other sites More sharing options...
M4ST3R Posted May 29, 2012 at 07:54 PM Share Posted May 29, 2012 at 07:54 PM Mh mal ne blöde Idee (ok ist gar nicht blöd) Aber im Wiki ist ein Singleton Pattern. Das könntest du dir programmieren und dann via Setter Methode (ist noch nicht verbaut) und einiger kleiner Modifikationen eine Verbindung aufbauen, die du jederzeit von überall wieder auslesen kannst!? Oder hab ich deine Frage falsch verstanden? Quote Link to comment Share on other sites More sharing options...
evilpunisher Posted May 29, 2012 at 09:27 PM Share Posted May 29, 2012 at 09:27 PM Hallo, also ich würde auch das Singleton Pattern wie von M4ST3R empfohlen nutzen. Du hast dann von überall Zugriff auf die Verbindung. Z.B. kannst du das dann in deiner swing-Klasse nutzen. Das Singleton Pattern bedeutet, das nur ein Objekt von der Klasse erstellt wird. Wenn du es anforderst wird das Objekt zurück gegeben bzw. wenn es noch nicht vorhanden ist (beim ersten Aufruf) erstellt. Da es ja nur eine Verbindung gibt, eignet sich das Singleton Pattern bestens dafür. MfG Quote Link to comment Share on other sites More sharing options...
treaki Posted May 30, 2012 at 05:07 AM Author Share Posted May 30, 2012 at 05:07 AM hi, Singleton Pattern hört sich gut an. wo finde ich mehr Informationen?? wenn ihr das tf wiki meint find ich da nichts: http://www.tinkerunity.org/wiki/index.php?title=Special%3ASearch&profile=advanced&search=Singleton+Pattern&fulltext=Search&ns0=1&redirs=1&profile=advanced danke und gruß Quote Link to comment Share on other sites More sharing options...
Plenz Posted May 30, 2012 at 05:46 AM Share Posted May 30, 2012 at 05:46 AM Singleton Pattern hört sich gut an. wo finde ich mehr Informationen?? http://www.google.de/search?q=Singleton+Pattern Quote Link to comment Share on other sites More sharing options...
M4ST3R Posted May 30, 2012 at 09:19 AM Share Posted May 30, 2012 at 09:19 AM Nur weil das Wiki noch echt schlecht ist vom Aufbau.... http://www.tinkerunity.org/wiki/index.php/Java_-_Kommunikationsaufbau Quote Link to comment Share on other sites More sharing options...
The_Real_Black Posted May 30, 2012 at 05:36 PM Share Posted May 30, 2012 at 05:36 PM Nur weil das Wiki noch echt schlecht ist vom Aufbau.... http://www.tinkerunity.org/wiki/index.php/Java_-_Kommunikationsaufbau Vom Aufbau passt es schon aber wir müssen es noch mit mehr Inhalt füllen, aber Patterns müssen wir darin nicht unbedingt beschreiben ^^ dafür ist das richtige Wiki besser. http://www.tinkerunity.org/wiki/index.php/The_Real_Blacks_Projekte_ConnectionUtil Man hätte dazusagen sollen was das Singelton Pattern ist nicht jeder hat Informatik gelernt oder gar studiert. Man könnte es auch eine statische public Variable nennen. Ich verwende das Pattern in meinen Klassen häufig, da ich viele Verwaltungsklassen nicht mehrfach benötige ein beispiel befindet sich hinter dem Link oben. Quote Link to comment Share on other sites More sharing options...
M4ST3R Posted May 30, 2012 at 05:49 PM Share Posted May 30, 2012 at 05:49 PM Vom Aufbau passt es schon aber wir müssen es noch mit mehr Inhalt füllen, aber Patterns müssen wir darin nicht unbedingt beschreiben ^^ dafür ist das richtige Wiki besser. Naja also bei meinem Browser sieht das alles echt noch schrecklich aus. Aber da ich selbst keine Lust habe es zu verbessern, beschwere ich mich auch besser nicht Quote Link to comment Share on other sites More sharing options...
treaki Posted June 9, 2012 at 06:42 PM Author Share Posted June 9, 2012 at 06:42 PM vielen dank euch allen. ich habs jetzt hin bekommen. leuft super. danke euch allen für die mühe. gruß Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.