Getting an enclosing class's this reference

I'm creating a custom button and notifying registered ActionListeners whenever the button is clicked. In my code below, I want to create a new ActionEvent with the event source as "Button" instead of Button$Listener.
From the Listener class, how can I obtain the parent's this reference? I've tried using Button.this, but when the listener calls getClass().getName() on the event, it says its an ActionEvent, not a Button. That also confuses me.
public class Button extends JPanel
    private void notifyListeners(ActionEvent e)
        /* I could do it this way, but I'd rather not
        e.setSource(this);
        for ( ActionListener l : listeners )
            l.actionPerformed(e);
    private class Listener implements MouseListener
        public void mouseClicked(MouseEvent e)
            notifyListeners(new ActionEvent(this,
                                            ActionEvent.ACTION_PERFORMED,
                                            "clicked"));
}

I've tried using Button.this, but when the listener
calls getClass().getName() on the event, it says its
an ActionEvent, not a Button. Huh?
public class Outer {
  public static void main(String[] args) throws Exception {
    Outer outer = new Outer();
    Outer.Inner inner = outer.new Inner();
    inner.foo();
  class Inner {
    void foo() {
      System.out.println(Outer.this.getClass().getName());
prints "Outer"

Similar Messages

  • Need syntax to get reference to enclosing class.

    Given the following program, how do I change testIsMember() so that the program prints out the desired output as indicated in the program text:
    public class Nested
        public class Inner
        private boolean testIsMember(Inner i)
            // Help what goes here?
            return true;
        public void someMethod(Inner i)
            if(testIsMember(i)) {
                System.out.println("I am i's this$0");
            else {
                System.out.println("I am not i's this$0");
        public static void main(String a[])
            Nested n1 = new Nested();
            Nested n2 = new Nested();
            Inner i1 = n1.new Inner();
            Inner i2 = n2.new Inner();
            n1.someMethod(i1);
            n1.someMethod(i2);
            n2.someMethod(i1);
            n2.someMethod(i2);
            // Desired output:
            // I am i's this$0
            // I am not i's this$0
            // I am not i's this$0
            // I am i's this$0
    }

    Here's the only way I can think of doing it:
    public class Nested
        public class Inner
        private boolean testIsMember(Inner i)
            try {
               java.lang.reflect.Field f = Inner.class.getDeclaredField ("this$0");
               f.setAccessible (true);
               return f.get (i) == this;
            } catch (Exception e) {}
            return true;
        public void someMethod(Inner i)
            if(testIsMember(i)) {
                System.out.println("I am i's this$0");
            else {
                System.out.println("I am not i's this$0");
        public static void main(String a[])
            Nested n1 = new Nested();
            Nested n2 = new Nested();
            Inner i1 = n1.new Inner();
            Inner i2 = n2.new Inner();
            n1.someMethod(i1);
            n1.someMethod(i2);
            n2.someMethod(i1);
            n2.someMethod(i2);
            // Desired output:
            // I am i's this$0
            // I am not i's this$0
            // I am not i's this$0
            // I am i's this$0
    }I've tried the code and it produces the desired output.

  • Pass "this" reference within SessionBean to other classes

    Can "this" reference for a SessionBean be passed to other helper classes?
    For example,
    public class MySb implements SessionBean {
    MyClass a = new MyClass();
    public void myBusinessMethod() {
    a.methodA(this);
    It looks strange that MyClass.methodA is expecting a SessionBean as opposed to a EJBObject interface as parameter. I also thought about passing the SessionContext object. Can someone tell me the pros and cons?
    Thank you.

    Thanks for the reply.
    There are disadvantages using the EJBObject directly. However, since the call always comes from the EJBObject instance and the helpers simply call its methods within the same method call. For performance reason, will it hurt to do that? i.e.
    public class MyStatefulSessionBean ... {
    public void methodA() {
    helperA.methodA(this, parms);
    void changeState(StateHelper helper){this.helper=helper;}
    class helperA {
    methodA(EJBObject obj, parms){
    obj.changeState(new HelperB);
    My other alternative is to pass the SessionContext to the helpers and helpers can call its getObject() to retrieve the remote interface. Then performance suffers and unwanted private method (changeState) has to be exposed to the public interface.

  • I get this error msg - Permission denied for to webpage get property XPCComponents.classes

    A couple of days ago I started geting the error msg -Permission denied for to <webpage> get property XPCComponents.classes. It happens with every webpage I visit. If I hit the x in the upper righthand corner I can then access the page. This doesn't have in IE. Any ideas how I could fix this and why it started happening?

    Try the Firefox SafeMode to see how it works there. <br />
    ''A troubleshooting mode, which disables most Add-ons.'' <br />
    ''(If you're not using it, switch to the Default Theme.)''
    * You can open the Firefox 4.0+ SafeMode by holding the '''Shft''' key when you use the Firefox desktop or Start menu shortcut.
    * Or use the Help menu item, click on '''Restart with Add-ons Disabled...''' while Firefox is running. <br />
    ''Don't select anything right now, just use "Continue in SafeMode."''
    ''To exit the Firefox Safe Mode, just close Firefox and wait a few seconds before using the Firefox shortcut (without the Shft key) to open it again.''
    '''''If it is good in the Firefox SafeMode''''', your problem is probably caused by an extension, and you need to figure out which one. <br />
    http://support.mozilla.com/en-US/kb/troubleshooting+extensions+and+themes
    ''When you figure out what is causing that, please let us know. It might help other user's who have that problem.''
    If you look in the Error Console for that '''XPCComponents.classes''' error, there should be a '''Source file: chrome://''' address which might give us information related to which extension is causing that message.
    Firefox button > Web Developer -> Error Console or just use {Ctrl + Shft + J} from the keyboard

  • I cant get my new iMac to talk to my Cannon mf4350d. Some chat sites say they never will.  My latest error message is: "No destinations have been added to the [Destinations List]"  I cannot find this reference in Help...

    I cant get my new iMac to talk to my Cannon mf4350d. Some chat sites say they never will.  My latest error message is: "No destinations have been added to the [Destinations List]"  I cannot find this reference in Help...

    I cant get my new iMac to talk to my Cannon mf4350d. Some chat sites say they never will.  My latest error message is: "No destinations have been added to the [Destinations List]"  I cannot find this reference in Help...

  • Accessing Enclosing Class Members From Inner Class Subclass

    I have the following scenario that I cannot get to work. Notice the comments in B.doWork() for the problem code. In B.doWork(), how do I access m_strA?
    * A.java
    * Created on July 5, 2002, 2:20 PM
    package Projects.InnerTrouble.Files;
    public class A {
         public abstract class InnerA {
              public abstract void doWork ();
         public String m_strA;
         /** Creates new A */
         public A ()
                   new InnerA() {
                             public void doWork ()
                                       System.out.println("A$InnerA$1's doWork() called!");
                                       m_strA = "Annonymous subclass of InnerA's doWork did this";
                        }.doWork();
         * @param args the command line arguments
         public static void main (String args[])
                   A oTemp = new A();
                   System.out.println(oTemp.m_strA);
                   B.getB(oTemp).doWork();
                   System.out.println(oTemp.m_strA);
    class B extends A.InnerA {
         public B (A a)
                   a.super();
         public void doWork ()
                   System.out.println("B's doWork() called!");
                   // How do I access m_strA within B's doWork() method?  The following is what I would expect to be the answer, but it does not compile
                   // A.this.m_strA = "B's doWork did this";
         private static A.InnerA sm_oInnerA;
         public static A.InnerA getB (A a)
                   if (sm_oInnerA == null)
                        sm_oInnerA = new B(a);
                   return (sm_oInnerA);

    The whole point is that B is not an inner class of A
    so it does not have access to A's member variables.
    Eventhough B extends an inner class of A, that does
    not make B an inner class of A. That is in the JLS,
    but not so elegantly as I have put it, hehe.
    If B were an innerclass of InnerA, then it would
    qualify to access A's member variables.OK, I think that you are finally getting through to my thick skull on this one. Let me restate and get your check-off on my understanding of the situation.
    The only classes with access to A's this reference are A and inner classes of A that are found within the definition of A. So, despite the fact that A and B are in the same package (and B should have access to A's non-private members because B and A are in the same package), and despite the fact that we would normally state that B "is a" InnerA (which is an inner class of A and would have access to a reference to the A.this reference), B is not allowed access to A.this (because B "is not really a" InnerA in the same way that the anonymous implementation of InnerA "is a" InnerA). However, nothing would prevent me from giving B access to a reference of the enclosing A as long as it was done via a method of InnerA, and as long as the implementation of that method is contained in A's implementation.
    Does this "access" rule realy make sense? Are you aware of the justification for this rule? Or is the justification stated in the JLS? I would think that the compiler ought to be able to figure this kind of thing out and allow it. It seems to me the fact that I defined B in the way that I did, and the fact that B "is a" InnerA, implies that I desired a fairly tight relationship to A. In fact, I desired the exact relationship that exists for the anonymous implementation of InnerA.
    The following is a modified version of my original example that runs as I originally wanted it to, but works around the access rules discussed on this forum thread:
    * A.java
    * Created on July 5, 2002, 2:20 PM
    package Projects.InnerTrouble.Files;
    public class A {
         public abstract class InnerA {
              public abstract void doWork ();
              /** added to allow implementors of InnerA that are not enclosed in A's class definition to have access to the enclosing class */
              public A myEnclosingInstance ()
                        return (A.this);
         public String m_strA;
         /** Creates new A */
         public A ()
                   new InnerA() {
                             public void doWork ()
                                       System.out.println("A$InnerA$1's doWork() called!");
                                       m_strA = "Annonymous subclass of InnerA's doWork did this";
                        }.doWork();
         * @param args the command line arguments
         public static void main (String args[])
                   A oTemp = new A();
                   System.out.println(oTemp.m_strA);
                   B.getB(oTemp).doWork();
                   System.out.println(oTemp.m_strA);
    class B extends A.InnerA {
         public B (A a)
                   a.super();
         public void doWork ()
                   System.out.println("B's doWork() called!");
                   // The following is what I would expect to be the answer, but it does not compile
                   // A.this.m_strA = "B's doWork did this";
                   // added myEnclosingInstance() to get functionality desired above
                   myEnclosingInstance().m_strA = "B's doWork did this";
         private static A.InnerA sm_oInnerA;
         public static A.InnerA getB (A a)
                   if (sm_oInnerA == null)
                        sm_oInnerA = new B(a);
                   return (sm_oInnerA);
    }

  • How to get a LabVIEW class object to expose an invoke-node method?

    Hi,
          I like the property/invoke-node "paradigm" used for interacting with "objects".  Can LabVIEW-class objects expose their properties and methods this way?  Can one or more LabVIEW-class objects be compiled into a library or "assembly" (or other distrubution format) that allows the property/invoke-node usage?
    I've looked at (but not completely understood) "Creating LabVIEW Classes".  Have also searched for related posts.
    The pic below shows an invoke node wired to a class with a Public VI "VAT.Status.Hello.vi".  I'd like to see VAT.Status.Hello show-up as a Method.  (I just tried "Select Method", and selected "VAT.Status.Hello.vi" but dialog's "OK" button stays greyed-out.)
    Cheers.
    Message Edited by tbd on 03-29-2007 03:15 PM
    "Inside every large program is a small program struggling to get out." (attributed to Tony Hoare)
    Attachments:
    VATStat.JPG ‏54 KB

    Hi Aristos,
          Thanks for the reply!  It was a bit dissappointing, though.
    It appears the LabVIEW-class object will be moving away from (what seems to me) a convenient object-interface presented by the invoke-node/method paradigm - which allows us to interface with a large set of "objects" (.NET, ActiveX, LabVIEW GUI, VISA Resource, ?) in a similar manner and independent of the object's origin.  Being able to read the methods and parameters that appear in these nodes is also helpful for understanding diagram logic!
    I do like the option of dropping a friendly "VI looking" icon on the diagram, but perhaps an optional - even default - VI-icon representation for a class-object invoke-node is feasible - so the LabVIEW class-object could be the more generic object first, but with a traditional-G representation(?)
    Given the answer "We would like, someday, to support the property node"
    and "in the next version of LV, wiring the LV class to the property/invoke nodes will break the wire so we'll avoid confusion in the future",
    ... I guess you'll break the wire in the next version, but (perhaps) allow it again - if support of the property node is ever implemented?
    Regards.
    P.S. For the record, huge THANKS to whoever it was that straightened-out enumerated-types (somewhere) between LV4.1 and LV6.1.  Every time I add or remove an enumeration in a typedef, I silently give thanks to the bright and thoughtful soul(s) who made this valuable tool work so well!
    Hello. This is your friendly neighborhood R&D guy for LabVIEW classes.
    Regarding your request about property and invoke nodes as relates to LV classes....
    Short story: We would like, someday, to support the property node. We have no intention of ever supporting the invoke node.
    Long story: As we were creating LV classes, we had to evaluate the right programming interface for these things. We wanted LV classes to behave as new data types in LV. A developer should be able to create a LV class, then give it to someone who doesn't even know OO programming, and that second programmer could use the new data type without learning a lot of new concepts. From this principle, we held fast to the idea that the programming interface should be subVI calls whereever possible. The invoke node is really nothing more than a VI minus the icon. If you want, you can popup on any subvi node and uncheck the option "View as Icon". This will make the node display in a way that has the terminals listed as text, like the invoke node. So, at the end of the day, the invoke node is simply a subroutine call in LV that is language dependent, as opposed to the language independent iconography of LV generally.
    The property node is a slightly different story -- the functionality of a property node is actually different than an invoke node as its terminals are various subsets of the properties available, not a fixed list of parameters like the invoke node. The property node provides a nice interface for setting multiple properties in a block and only having to check a single error return. Very friendly. Our intent is to allow you to create a VI that has 5 terminals: object in, object out, error in, error out, and either a single input or a single output of your chosen type. VIs with this conpane could be marked as "properties" of the class and would show up when you wire the class wire to the property node. We would call the subVIs behind the scenes as needed to get/set the properties.
    This is on the longer term roadmap because it is "syntactic sugar" -- it sweetens the programming style, but it is not necessary to program effectively. You can get the same effect by writing those same VIs and stringing them along on a block diagram "railroad track" style. We'll probably get around to it in three or four versions of LV -- there are some major user requests that impact functionality that have to get done first.
    PS -- in the next version of LV, wiring the LV class to the property/invoke nodes will break the wire so we'll avoid confusion in the future of people thinking there's a way to use these nodes.
    Message Edited by Aristos Queue on 04-02-2007 09:56 AM
    Message Edited by tbd on 04-03-2007 12:39 PM
    "Inside every large program is a small program struggling to get out." (attributed to Tony Hoare)

  • Getting the value from a StationGlobal reference variable in TestExec User Interface Editor Mode.

    Hi,
    I am using the TestExec User Interface editor mode, in the SequenceFileLoad callback from my sequence an instance is made from a C# code module
    (the code module is located in another dll) , this reference is stored into a station global variable.
    Now I want to retrieve the reference from the station global variable in my TestExec User Interface code.
    So, is it possible to get this reference back from the station global variable?
    Best regards

    Reading the StationGlobal is not a problem. But the problem maybe that your reference contained in your StationGlobal is probably not valid once the SequenceFileLoad has completed its execution which it will have done once the SequenceFile has loaded.
    Any references you wish to pickup are best down via one of the ProcessModel callbacks such as ProcessSetup. 
    Regards
    Ray Farmer
    Regards
    Ray Farmer

  • Get information for classes from call stack in abap (like java reflection)

    Hi,
    is there any possibilty to get following information:
    I want to program a logging tool. You can create a logging object and use some methods like
    xxxxx->add_msg(msg) to put logging information to the logging object.
    but i also want to find out, from which class/object/runtime environment this msg comes.
    example:
    class CL_ABC uses the logging tool and does following call:
    lo_logger = CL_logger->get_logger().
    lo_logger->add_msg( 'test the code' ).
    now the method ->add_msg() in logger object is called. inside this method, i want to have the information, from which class/object the ->add_msg() method is called. after the call, the logging object must have this information like:
    CALL_CLASS: CL_ABC
    CALL_LINE: 83
    MSG: test the code
    any ideas?

    You can use the SYSTEM_CALLSTACK function module.
    Read this thread, Uwe has given details on both getting the calling class and method: Re: How to determine current method / interface method that is running?
    Most probably this solves your needs.
    Regards

  • How to get the current class name in static method?

    Hi,
    I'd like to get the current class name in a static method. This class is intended to be extended. So I would expect that the subclass need not to override this method and at the runtime, the method can get the subclass name.
    getClass() doesn't work, because it is not a static method.
    I would suggest Java to make getClass() static. It makes sense.
    But in the mean time, does anybody give an idea to work around it?
    Thank you,
    Bill

    Why not create an instance in a static method and use getClass() of the instance?
    public class Test {
       public static Class getClassName() {
          return new Test().getClass();

  • Getting the Adapter Class Not Found Error in the Java Manipulator

    Hi,
    I wrote a custom java manipulator for the baseline update and created a jar file for the class. This works fine in the Windows machine. All I have to do is while specifying the CLASSPATH, I entered the ./ib/newManipulator.jar; ./lib/additional_dependency.jar. When I tried to deploy the same code in the Unix environment, it fails saying the Adapter Class not found. The only difference from windows and Unix environment is that in the windows machine, in order to run the base line update, I go to the directory my_project->control->baseline_update.bat but in case of Unix environment I have a separate location where I have a shell script called run-baseline-update.sh located at /apps/bin which invokes the baseline.sh in the directory my_project/control/baseline.sh. I even tried to put the full path of the jar files e.g. /my_project/lib/newManipulator.jar; /my_project/lib/additional_dependency.jar in the class path but still the same issue. Any suggestions?

    Unix classpath needs ":" as the path separator, not ";". Changing that will make this work.
    For reference, later versions of the deployment template make this configurable, so you'd see (in environment.properties):
    # PATH_SEP_VARNAME: for platform-independence
    PATH_SEP_VARNAME=;
    # Forge needs record store libraries as well as Spring to load record store adapter configuration files
    FORGE_CLASSPATH=./config/lib/java/spring-delegate-adapter-1.0.1.jar${PATH_SEP_VARNAME}./config/lib/java/spring.jar${PATH_SEP_VARNAME}./config/lib/java/eacToolkit.jar${PATH_SEP_VARNAME}./config/script${PATH_SEP_VARNAME}.
    You can then add the following to your <forge /> definition in AppConfig.xml:
    <arg>--javaClasspath</arg>
    <arg>${FORGE_CLASSPATH}</arg>
    Hope this helps.
    Michael

  • How to get SDKODBC Wrapper class for indesign cs3

    Hi,
         I have to implement the mysql database with my indesign plugin. I didn't have a SDKODBC Wrapper class. Can any one say how to get SDKODBC Wrapper class from adobe.
    Regards,
    saravanan.

    I doubt if change documents are generated for SE78 transaction.
    For list of change documents defined, please check table: TCDOB.
    Hope this helps.
    Kind Regards
    Eswar

  • Getting Bad Applet class name exception while opening applet.

    Hi,
      While opening an applet in my mac os x v10.6.8 machine i am getting "Bad Applet class name exception" which is working fine in mac os x v10.7.5.Java version in my mac is 1.6.0_43.Can anyone please help me to resolve this.

    Apple barred Java from running on Macs in order to safeguard users by blocking Java 7 Update 11 and adding it to the banned list in XProtect.
    This was the second time in two weeks that Apple had blocked Oracle's code from running on Macs. The threat was so serious that the U.S. Department of Homeland Security had recommended that all Java 7 users disable or uninstall the software until a patch was issued. This time Java is blocked through Apple's XProtect anti-malware feature.
    Java has come under fire as the means by which hackers have been able to gain control of computers. In April 2012 more than 600,000 Macs were reported to have been infected with a Flashback Trojan horse that was being installed on people's computers with the help of Java exploits. Then in August Macs were again at risk due to a flaw in Java, this time around, there was good news for Mac users: Thanks to changes Apple has made, most of us were safe from the threat.
    Unwilling to leave its customers open to potential threats Apple decided it's safer to block Java entirely.
    In order to block older versions of Flash, Apple has updated its "Xprotect.plist" file so that any versions that come before the current one (version 11.6.602.171) cannot be used on a Mac. Users who have older versions of Flash installed will be greeted with an alert that says "Blocked plug-in," and Safari will prompt the user to update to a newer version.
    Macs running OS X Snow Leopard and beyond are affected.
    UPDATE for those running Lion or Mountain Lion:
    Oracle on Friday February 1 released a new version reportedly addressing vulnerabilities seen with the last build.
    Apple disabled Java 7 through the OS X XProtect anti-malware system, requiring users to have at least version "1.7.0_10-b19" installed on their Macs. The release dated February 1 carries the designation "1.7.0_13-b20," meeting Apple's requirements.
    Oracle "strongly recommends" applying the CPU fixes as soon as possible, saying that the latest Critical Patch Update contains 50 new security fixes across all Jave SE products.
    Update for Snow Leopard users:
    Apple issued update 12 for Java for OS 10.6:
    http://support.apple.com/kb/DL1573
    Note:  On systems that have not already installed Java for Mac OS X 10.6 update 9 or later, this update will configure web browsers to not automatically run Java applets. Java applets may be re-enabled by clicking the region labeled "Inactive plug-in" on a web page. If no applets have been run for an extended period of time, the Java web plug-in will deactivate.
    If, after installing Java for OS X 2013-002 and the latest version of Java 7 from Oracle, you want to disable Java 7 and re-enable the Apple-provided Java SE 6 web plug-in and Web Start functionality, follow these steps:
    http://support.apple.com/kb/HT5559?viewlocale=en_US
    Further update:
    Apple issued this Java related security update No. 13 on February 19:
    http://support.apple.com/kb/HT5666
    and Update No. 14 on March 4:  http://support.apple.com/kb/DL1573
    http://support.apple.com/kb/HT5677
    You should also read this:
    https://support.apple.com/kb/HT5672
    The standard recommendation is for users to turn off Java except when they have to use it on known and trusted websites (like their bank). Javascript, which is unrelated despite the name, can be left on.
    Further useful comment in this article:
    http://www.macworld.co.uk/macsoftware/news/?newsid=3435007&olo=email

  • The buttons in main the vi get locked after opening a vi reference in a subpanel and using buttons within the subpanel.

    I am trying to open a reference to a vi in the subpanel of the main vi. However after the vi opens in the subpanel and after pressing a few buttons in the subpanel the buttons in the main vi get locked, i.e. I can't even close the main vi or control anything else. Is there any way how I can avoid this happening?

    > The buttons in main the vi get locked after opening a vi reference in
    > a subpanel and using buttons within the subpanel.
    >
    > I am trying to open a reference to a vi in the subpanel of the main
    > vi. However after the vi opens in the subpanel and after pressing a
    > few buttons in the subpanel the buttons in the main vi get locked,
    > i.e. I can't even close the main vi or control anything else. Is there
    > any way how I can avoid this happening?
    This is most likely happening because in either the top or sub panel,
    there is an event structure that is queuing events, and is set to lock
    the panel until the events are handled, and because of the logic in the
    diagram, the events aren't being pulled from the queue.
    So, you have a deadlock. You are waiting
    on the panel. The panel is
    waiting on the diagram. And the diagram is waiting on something else.
    So, if there are indeed event structures involved, determine where in
    the diagram things are delaying. Also, if you do not need the panel to
    lock until the event is handled, you can change the setting in the
    events dialog on the structure. But the events will still be queued
    until the diagram starts executing.
    Greg McKaskle

  • Is there a class for this?

    I'm trying to store a collection of data in which certain elements are removed after they've been present for a certain period of time. Some items live longer than others. What I want is to retrieve these items in roughly the same order every time.
    Let's say that I start with 1 2 3 4 5 6 7 8 9 10. Then 4 times out, and 11 comes in. I want retrieve them as 1 2 3 11 5 6 7 8 9 10.
    I could write my own class for this, but I'd rather not have to if something like this exists. Any help would be greatly apreciated.

    Let's examine your problem carefully
    You want to have some data structure that behaves like a list, but insertion order is not at a fixed position, but preferrably at "erased" positions (like a disk using the FAT file system).
    java.util.ArrayList will not do the job nicely , nor java.util.LinkedList - you will need to maintain a lot of pointers.
    Probably you will have to write a class that borrows the idea from the FAT file system - you have an (almost) fixed-size array representing the data. If you want to remove an item, simply set its reference to "null" in the array.
    If you want to insert a new item, you need to find the first (or last - depends on your needs and if it is better to move less or more items on screen) empty slot.
    If your data requires more elements than your array size, you must copy the array into a bigger array, and release the older array.

Maybe you are looking for