Object Listener

I would like to create a listener for java.util.LinkedList, so that when ever something is added or removed an event is fired.
Does any one have a good way about tackling this problem???

If you don't care about using Swing classes then you can use EventListenerList wich is the most generic class extended by all the swing listeners. In fact if you are not using Swing then the best way is to copy this class to your application so you don't depend on Swing just to use a list of listeners (this class does not depend on any other swing class so you will not have any problem doing this).
The following is the source code of this class
package yourPackage;
import java.io.*;
import java.util.*;
import java.lang.reflect.Array;
* A class that holds a list of EventListeners.  A single instance
* can be used to hold all listeners (of all types) for the instance
* using the list.  It is the responsiblity of the class using the
* EventListenerList to provide type-safe API (preferably conforming
* to the JavaBeans spec) and methods which dispatch event notification
* methods to appropriate Event Listeners on the list.
* The main benefits that this class provides are that it is relatively
* cheap in the case of no listeners, and it provides serialization for
* event-listener lists in a single place, as well as a degree of MT safety
* (when used correctly).
* Usage example:
*    Say one is defining a class that sends out FooEvents, and one wants
* to allow users of the class to register FooListeners and receive
* notification when FooEvents occur.  The following should be added
* to the class definition:
* <pre>
* EventListenerList listenerList = new EventListenerList();
* FooEvent fooEvent = null;
* public void addFooListener(FooListener l) {
*     listenerList.add(FooListener.class, l);
* public void removeFooListener(FooListener l) {
*     listenerList.remove(FooListener.class, l);
* // Notify all listeners that have registered interest for
* // notification on this event type.  The event instance
* // is lazily created using the parameters passed into
* // the fire method.
* protected void fireFooXXX() {
*     // Guaranteed to return a non-null array
*     Object[] listeners = listenerList.getListenerList();
*     // Process the listeners last to first, notifying
*     // those that are interested in this event
*     for (int i = listeners.length-2; i>=0; i-=2) {
*         if (listeners==FooListener.class) {
* // Lazily create the event:
* if (fooEvent == null)
* fooEvent = new FooEvent(this);
* ((FooListener)listeners[i+1]).fooXXX(fooEvent);
* </pre>
* foo should be changed to the appropriate name, and fireFooXxx to the
* appropriate method name. One fire method should exist for each
* notification method in the FooListener interface.
* <p>
* <strong>Warning:</strong>
* Serialized objects of this class will not be compatible with
* future Swing releases. The current serialization support is appropriate
* for short term storage or RMI between applications running the same
* version of Swing. A future release of Swing will provide support for
* long term persistence.
* @version 1.27 02/02/00
* @author Georges Saab
* @author Hans Muller
* @author James Gosling
public class EventListenerList implements Serializable {
/* A null array to be shared by all empty listener lists*/
private final static Object[] NULL_ARRAY = new Object[0];
/* The list of ListenerType - Listener pairs */
protected transient Object[] listenerList = NULL_ARRAY;
* Passes back the event listener list as an array
* of ListenerType-listener pairs. Note that for
* performance reasons, this implementation passes back
* the actual data structure in which the listener data
* is stored internally!
* This method is guaranteed to pass back a non-null
* array, so that no null-checking is required in
* fire methods. A zero-length array of Object should
* be returned if there are currently no listeners.
* WARNING!!! Absolutely NO modification of
* the data contained in this array should be made -- if
* any such manipulation is necessary, it should be done
* on a copy of the array returned rather than the array
* itself.
public Object[] getListenerList() {
     return listenerList;
* Return an array of all the listeners of the given type.
* @returns all of the listeners of the specified type.
* @since 1.3
public EventListener[] getListeners(Class t) {
     Object[] lList = listenerList;
     int n = getListenerCount(t);
EventListener[] result = (EventListener[])Array.newInstance(t, n);
     int j = 0;
     for (int i = lList.length-2; i>=0; i-=2) {
     if (lList[i] == t) {
          result[j++] = (EventListener)lList[i+1];
     return result;
* Returns the total number of listeners for this listener list.
public int getListenerCount() {
     return listenerList.length/2;
* Returns the total number of listeners of the supplied type
* for this listener list.
public int getListenerCount(Class t) {
     int count = 0;
     Object[] lList = listenerList;
     for (int i = 0; i < lList.length; i+=2) {
     if (t == (Class)lList[i])
          count++;
     return count;
* Adds the listener as a listener of the specified type.
* @param t the type of the listener to be added
* @param l the listener to be added
public synchronized void add(Class t, EventListener l) {
     if (l==null) {
     // In an ideal world, we would do an assertion here
     // to help developers know they are probably doing
     // something wrong
     return;
     if (!t.isInstance(l)) {
     throw new IllegalArgumentException("Listener " + l +
                         " is not of type " + t);
     if (listenerList == NULL_ARRAY) {
     // if this is the first listener added,
     // initialize the lists
     listenerList = new Object[] { t, l };
     } else {
     // Otherwise copy the array and add the new listener
     int i = listenerList.length;
     Object[] tmp = new Object[i+2];
     System.arraycopy(listenerList, 0, tmp, 0, i);
     tmp[i] = t;
     tmp[i+1] = l;
     listenerList = tmp;
* Removes the listener as a listener of the specified type.
* @param t the type of the listener to be removed
* @param l the listener to be removed
public synchronized void remove(Class t, EventListener l) {
     if (l ==null) {
     // In an ideal world, we would do an assertion here
     // to help developers know they are probably doing
     // something wrong
     return;
     if (!t.isInstance(l)) {
     throw new IllegalArgumentException("Listener " + l +
                         " is not of type " + t);
     // Is l on the list?
     int index = -1;
     for (int i = listenerList.length-2; i>=0; i-=2) {
     if ((listenerList[i]==t) && (listenerList[i+1].equals(l) == true)) {
          index = i;
          break;
     // If so, remove it
     if (index != -1) {
     Object[] tmp = new Object[listenerList.length-2];
     // Copy the list up to index
     System.arraycopy(listenerList, 0, tmp, 0, index);
     // Copy from two past the index, up to
     // the end of tmp (which is two elements
     // shorter than the old list)
     if (index < tmp.length)
          System.arraycopy(listenerList, index+2, tmp, index,
                    tmp.length - index);
     // set the listener array to the new array or null
     listenerList = (tmp.length == 0) ? NULL_ARRAY : tmp;
// Serialization support.
private void writeObject(ObjectOutputStream s) throws IOException {
     Object[] lList = listenerList;
     s.defaultWriteObject();
     // Save the non-null event listeners:
     for (int i = 0; i < lList.length; i+=2) {
     Class t = (Class)lList[i];
     EventListener l = (EventListener)lList[i+1];
     if ((l!=null) && (l instanceof Serializable)) {
          s.writeObject(t.getName());
          s.writeObject(l);
     s.writeObject(null);
private void readObject(ObjectInputStream s)
     throws IOException, ClassNotFoundException {
listenerList = NULL_ARRAY;
     s.defaultReadObject();
     Object listenerTypeOrNull;
     while (null != (listenerTypeOrNull = s.readObject())) {
     EventListener l = (EventListener)s.readObject();
     add(Class.forName((String)listenerTypeOrNull), l);
* Returns a string representation of the EventListenerList.
public String toString() {
     Object[] lList = listenerList;
     String s = "EventListenerList: ";
     s += lList.length/2 + " listeners: ";
     for (int i = 0 ; i <= lList.length-2 ; i+=2) {
     s += " type " + ((Class)lList[i]).getName();
     s += " listener " + lList[i+1];
     return s;
bye

Similar Messages

  • How to create many objects listening for one event

    I'm experimenting with the EventDispatcher class and I have a
    test class working. I want to use a loop to create a variety of
    movie clips that all listen for an event that gets dispatched every
    half a second. I have the event dispatching properly. My problem is
    that when creating the objects, the temporary variable I use to
    hold each created object has a life that extends beyond the loop in
    which it is instantiated. Rather than all five created objects
    changing color, only the last one changes color (see the code
    below--it lives on the first frame of an FLA file).
    This is not entirely surprising when I look at the code --
    'this' refers to the global scope and 'square' refers to the last
    created object that it pointed to. Here's the resulting trace:
    handler runing, square name is square 4
    this class name is global
    handler runing, square name is square 4
    this class name is global
    handler runing, square name is square 4
    this class name is global
    handler runing, square name is square 4
    this class name is global
    handler runing, square name is square 4
    this class name is global
    How can I modify this code so that each square object changes
    its own color?

    graphics.clear in the context of that function handler in my
    code would refer not to the squares but to the global scope,
    wouldn't it? In which case you'd be clearing all the graphics from
    your top level movie. I tried changing 'square.graphics' to just
    'graphics' in my handler and my squares just remained the original
    steady black.
    Your code doesn't use a loop and therefore isn't re-using a
    variable. You've escaped my 'logical errors' through brute force.
    (BTW, I think my code would work in AS2 if I used the old-school
    draw methods). Suppose you had to create 100 objects? Would you
    want to manually instantiate each one, typing that function over
    and over again? You'd have 500 lines of highly redundant code!
    Maybe try your example using a loop instead? I think you'll
    find it's pretty tough to sneak any vars like 'i' or 'square' from
    the global scope into the handler--the handler refers to the
    living, breathing variable rather than it's value at the time the
    handler was instantiated. Furthermore, you can't sneak any
    information about the square into your handler via the event object
    because the event object is created in a totally different place.

  • Which object in hierarchy should add event listener?

    Hello all,
    I'm quite new to the whole OOP thing, and one of the things I keep wondering about is this:
    Which class should listen for events if the choice is between a contained class or a containing class?
    For example:
    An instance of Game holds an instance of Board which holds an array of instances of fields.
    This might be a scenario for a simple board game, I guess (In my case I am working on Reversi).
    A player should click a field to place a piece on it. I could let the Field class listen for the click event,
    but when a player places a piece, other pieces might have to flip, so an object at a higher level should handle this (board / game / maybe another object).
    So in order to make sure this happens, I could let the field object listen for the event and than tell the higher-level-object to do his thing, or I could
    let the higher-level-object add an event listener on the field object, and than both flip the nescesary pieces as well as tell the field to add a piece on itself.
    Could anyone explain which and why either solution (or maybe a third on) is better?
    Thanks for your time!

    qdudu wrote:
    Hello all,
    I'm quite new to the whole OOP thing, and one of the things I keep wondering about is this:
    Which class should listen for events if the choice is between a contained class or a containing class?The class that can respond to the events should implement the Listener.
    For example:
    An instance of Game holds an instance of Board which holds an array of instances of fields.
    This might be a scenario for a simple board game, I guess (In my case I am working on Reversi).
    A player should click a field to place a piece on it. I could let the Field class listen for the click event,
    but when a player places a piece, other pieces might have to flip, so an object at a higher level should handle this (board / game / maybe another object).Sounds like Board would be a good choice, then.
    So in order to make sure this happens, I could let the field object listen for the event and than tell the higher-level-object to do his thing, or I could
    let the higher-level-object add an event listener on the field object, and than both flip the nescesary pieces as well as tell the field to add a piece on itself.Sounds like the field object can't do much except forward the event to the real handler. In that case I'd vote for the higher-level-object as the listener.
    Could anyone explain which and why either solution (or maybe a third on) is better?In this case it could be either one. Try both and see. But based on the little you've posted here I'd vote for the higher-level-object, the Board.
    %

  • Simple Button Listener not so simple

    Here is code that works fine without the Listener:
    myButton_Zoom = function () {
    bt_zoombig_mc._visible = !bt_zoombig_mc._visible;
    Now when I try to add a listener it will not listen. Here is
    the code with the Listener:
    listener = new Object();
    listener.myButton_Zoom = function(objEvt) {
    bt_zoombig_mc._visible = !bt_zoombig_mc._visible;
    myList.addEventListener("myButton_Zoom",listener);
    Can anybody please tell me why?

    This is the same code as you attached above. It will not work
    for 2 reasons.
    Will not toggle visibility and will not call a function.
    Maybe think from scratch and make 2 buttons:
    ButtonUp_mc and ButtonDn_mc
    Place ButtonUp_mc on top of the other.
    Put the same code on both
    If you can achieve the visibility then we are half way there.
    Next, make 2 simple functions in the root like:
    goto_frame = function () {
    nextFrame();
    goBack_frame = function () {
    prevFrame();
    One function is called from either button (goes to next frame
    and then goes back)
    The goes back function is on the bottom and executes with the
    toggle code after
    the user has clicked the top button and made it _visible =
    false.
    Now we need to call these functions when the user clicks
    either button so
    this function has to appear in the toggle code with the
    Listener either embbeded
    with the Listener code or, outside following the listener
    code.
    In short, the button executes the _visible code, then calls
    the function.

  • What Exactly is a Listener

    Im guessing that a listener is a invisible object in a frame?
    Is that correct. Im also guessing that in order to create a
    Function to be called You have to first create a listener like
    below
    listener = new Object();
    Listener.KeyUp = Function() {
    Your Code......
    ?? Am I correct. Or In order for a function to respond to a
    users reaction. You have to create a listener like above. And a
    regular Function can be created but only behind the scenes. Someone
    help me out here

    numerical07,
    >> Im guessing that a listener is a invisible object in
    a
    >> frame? Is that correct.
    A listener is an object, yes. It's not an object with
    visible
    properties, so it makes sense to call it invisible.
    >> Im also guessing that in order to create a Function
    >> to be called You have to first create a listener
    like
    >> below
    >>
    >> listener = new Object();
    >> Listener.KeyUp = Function() {
    >> Your Code......
    >> }
    Functions are also objects; just a different kind. In fact,
    everything
    in ActionScript is an object. The kind of object you're
    talking about --
    your listener -- will be an instance of the Object class
    (it's kind of funny
    to think of that way, but it will be an Object object).
    Functions are
    instances of the Function class, they are Function objects
    and may operate
    completely on their own. You can write a custom function like
    this:
    function myAction():Void {
    // do something here
    This means that, later, you can call the myAction() function
    in a later
    frame, and the instructions inside myAction()'s definition
    will be carried
    out.
    Coincidentally, you may assign a function to an event
    managed by a
    listener object. Think of listeners as "ambassadors" or
    "liaisons" for
    other objects. The Key class, for example, feaures a
    Key.onKeyUp event.
    Because the Key class uses a listener mechanism, you must
    create a listener
    object to act as liaison for Key's events. Like this:
    var listener:Object = new Object();
    listener.onKeyUp = function():Void {
    // your code here
    And finally, you must tell the Key class to associate itself
    with that
    listener.
    Key.addListener(listener);
    In the code I just showed, you're assigning a function
    literal to the
    listener's onKeyUp event. Instead, you could use a named
    function, like the
    one we looked at earlier ...
    var listener:Object = new Object();
    listener.onKeyUp = myAction;
    Key.addListener(listener);
    Because myAction already has a meaning (it was defined
    earlier), that
    suffices as a set of instructions for the listener's onKeyUp
    event. Make
    sense?
    Now, as it happens, there's more than one way to use
    listeners in
    ActionScript 2.0. Some objects don't support an addListener()
    method.
    Some, instead, support addEventListener(). That one works
    almost the same
    way, except instead of providing merely a reference to the
    listener object,
    you also specify the event to listen for ...
    obj.addEventListener("click", listener);
    How would you know? The ActionScript 2.0 Language Reference
    is your
    best first stop. Either that, or the Component Language
    Reference, which
    covers components. Both are available via the F1 key.
    >> In order for a function to respond to a users
    reaction.
    >> You have to create a listener like above. And a
    regular
    >> Function can be created but only behind the scenes.
    I think the above suggestions should get you started. Note,
    too, that
    many objects don't require listeners at all. Buttons and
    movie clips, for
    example, can be handled much more directly:
    myClip.onRelease = myCustomFunction;
    ... or ...
    myClip.onRelease = function():Void {
    // code here
    The ActionScript 2.0 Language Reference and Component
    Language Reference
    are strongly organized around classes, so that should help
    you navigate. If
    you're dealing with a movie clip object (that is, a movie
    clip symbol on the
    Stage), look up the MovieClip class. If you're dealing with a
    dynamic or
    input text field, look up the TextField class. Need to learn
    about keys?
    Look up the Key class ... and so on. Each class has one or
    more of three
    cateogories: properties (characteristics the object has),
    methods (things
    the object can do), and events (things the object can react
    to).
    David Stiller
    Adobe Community Expert
    Dev blog,
    http://www.quip.net/blog/
    "Luck is the residue of good design."

  • Srvctl remove listener

    Hi,
    I try to cleanup my Cluster according to Metalink
    Steps to Remove Node from Cluster When the Node Crashes Due to OS/Hardware Failure and cannot boot up [ID 466975.1]
    Oracle Version: 10.2.0.4
    Problem:
    srvctl remove listener
    seems to be unknown to system - looks like that srvctl does not know the object: listener
    oracle@node1:/crs_home/bin> srvctl remove listener ora.node2.LISTENER_node2.lsnr
    Usage: srvctl <command> <object> [<options>]
    oracle@node1:/crs_home/bin> srvctl remove listener
    Usage: srvctl <command> <object> [<options>]
    oracle@node1:/crs_home/bin>
    But in the HELP it shows the object listener
    oracle@node1:/crs_home/bin> srvctl remove
    Usage: srvctl <command> <object> [<options>]
    command: enable|disable|start|stop|relocate|status|add|remove|modify|getenv|setenv|unsetenv|config
    objects: database|instance|service|nodeapps|asm|_listener_
    For detailed help on each command and object and its options use:
    srvctl <command> <object> -h
    oracle@node1:/crs_home/bin>
    Question:
    Is it also possible to use crs_unregister to remove the listener ?
    From the Metalink document:
    The srvctl remove listener command used below is only applicable in 10204 and higher releases including 11.1.0.6. The command will report an error if the clusterware version is less than 10204. If clusterware version is less than 10204, use netca to remove the listener
    But I have version 10.2.0.4 - and netca won´t delete the listener, because the maschines are not available
    Christian

    Hi,
    I cannot remove the listener and vip entries
    node1:/oracle/product/10.2.0/db_1/bin # ./srvctl remove nodeapps -n node3
    Please confirm that you intend to remove the node-level applications on node node3 (y/[n]) y
    PRKO-2112 : Some or all node applications are not removed successfully on node: node3
    node1:/oracle/product/10.2.0/db_1/bin # exit
    logout
    oracle@node1:/crs_home/bin> ./crs_stat -t
    Name Type Target State Host
    ora.feuer.db application ONLINE ONLINE node1
    ora....r1.inst application ONLINE ONLINE node1
    ora....SM1.asm application ONLINE ONLINE node1
    ora....C1.lsnr application ONLINE ONLINE node1
    ora.node1.gsd application ONLINE ONLINE node1
    ora.node1.ons application ONLINE ONLINE node1
    ora.node1.vip application ONLINE ONLINE node1
    ora....C2.lsnr application OFFLINE OFFLINE
    ora.node2.vip application OFFLINE OFFLINE
    ora....C3.lsnr application OFFLINE OFFLINE
    ora.node3.vip application OFFLINE OFFLINE
    oracle@node1:/crs_home/bin>

  • How to bind Hibernate domain objects to the UI layer

    Dear All,
    I am trying to bind FX UI controls to properties of a Hibernate Domain object. Is there any good example to refer to for this purpose?
    Thanks & Regards,
    Nitin Gupta

    Assuming you do not formulate your hibernate objects as pojos with javafx properties directly, if the hibernate object is a pojo with or without PCL, you can convert the properties of the pojo to observable values (or properties) directly. These are used in a bind statement.
    Check out what jgoodies does with BeanAdapter or PresentationModel. You need the same concept. I've attached a class that does this for a pojo already (its an incomplete port of jgoodies PresentationModel). It will work for any pojo. It does not have setter support as it was just a demonstration. Its efficient for a pojo with a large number of properties. You could also write a very short property connector to produce one observable value per property. The value of the class below is to be able to swap out the bean being observed without having to change or reset the property observable values each time. Bind once and then just reset the bean (think master detail).
    package scenegraphdemo;
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Map;
    import javafx.beans.property.ObjectProperty;
    import javafx.beans.property.ObjectPropertyBase;
    import javafx.beans.property.Property;
    import javafx.beans.property.StringProperty;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue;
    import javafx.beans.value.WritableValue;
    * An object binding object that creates object bindings based on property names
    * specified as strings. This is a convenience class to avoid having observable
    * values directly dependent on the underlying bean. The actual bean the
    * properties connect can be changed dynamically using the channel or
    * <code>setBean</code>. This allows you to setup binding when you don't have
    * the bean to bind to or the bean to bind to will change as in the detail part
    * of a master-detail screen. Generally, the return values from
    * <code>getProperty()</code> should be used for binding not the factory itself.
    * The object should be a domain object bean with bean methods to get or set the
    * value using java bean naming conventions OR it should use javafx property
    * definition conventions. The factory will automatically listen for standard
    * java bean changes using <code>PropertyChangeListener</code> approaches unless
    * you indicate to not to.
    * <p>
    * When the bean itself changes, the properties fire to indicate that their
    * values may have changed and the observing object should update itself. This
    * object allows you to integrate your javafx/POJOs into the binding
    * infrastructure without being dependent on the actual underlying bean. If you
    * are familiar with jgoodies <code>BindingAdapter</code> this is a similar
    * class.
    * <p>
    * This only handles reading bean properties. Need to add set() logic.
    * <p>
    * TODO: Make this work better. Many corner cases to cover.
    * <p>
    * TODO: Instead of just method calls on POJOs, also check for PCL. Note that
    * javafx properties won't work easily they are always tied to the underlying
    * object so I would have to write another CaptiveObjectProperty object that is
    * essentially a delegator.
    public class BeanPropertyFactory<T> extends ObjectProperty<T> {
         ObservableValue<T> channel;
         Map<String, CaptiveObjectProperty> properties = new HashMap<String, CaptiveObjectProperty>();
         boolean listenForBeanPCLEvents = true;
         public boolean isListenForBeanPCLEvents() {
              return listenForBeanPCLEvents;
         public void setListenForBeanPCLEvents(boolean listenForBeanPCLEvents) {
              this.listenForBeanPCLEvents = listenForBeanPCLEvents;
              if (getBean() != null)
                   removeBeanPCLListener(getBean());
          * The bean channel where the bean is obtained.
          * @return
         public ObservableValue<T> getChannel() {
              return channel;
         public BeanPropertyFactory() {
              setChannel(new ObjectProperty());
         public BeanPropertyFactory(ObservableValue<T> channel) {
              if (channel == null)
                   setChannel(new ObjectProperty());
              else
                   setChannel(channel);
         protected void setChannel(ObservableValue<T> channel) {
              if (this.channel != null) {
                   removeBeanChangeListener(this.channel);
              this.channel = channel;
              if (this.channel != null) {
                   addBeanChangeListener(this.channel);
                   updateStringProperty(getBean());
              invalidateProperties();
              fireValueChangedEvent();
         protected StringProperty stringProperty = new StringProperty();
          * The string property is an observable toString property. It cannot be set.
          * @return
         public StringProperty beanStringProperty() {
              return stringProperty;
         public String getBeanString() {
              return beanStringProperty().getValue();
          * A listener that listens to changes in the bean channel. This only fires
          * when the bean changes not when the properties on the bean change. The
          * default actions updates the "string" property representation of this
          * object as well as attaches property change listeners.
          * @author Mr. Java
         protected class BeanChangeListener implements ChangeListener {
              @Override
              public void changed(ObservableValue arg0, Object arg1, Object arg2) {
                   if (arg1 != null) {
                        BeanPropertyFactory.this.removeBeanPCLListener(arg1);
                   if (arg2 != null) {
                        BeanPropertyFactory.this.addBeanPCLListener(arg2);
                   updateStringProperty(arg2);
         protected void updateStringProperty(Object obj) {
              if (obj != null)
                   beanStringProperty().setValue(obj.toString());
              else
                   beanStringProperty().setValue("null");
         protected void removeBeanChangeListener(ObservableValue<T> obj) {
              if (beanChangeListener == null)
                   beanChangeListener = createBeanChangeListener();
              if (obj != null) {
                   obj.addListener(beanChangeListener);
         protected void addBeanChangeListener(ObservableValue<T> obj) {
              if (beanChangeListener == null)
                   beanChangeListener = createBeanChangeListener();
              if (obj != null)
                   obj.removeListener(beanChangeListener);
          * The instance of a change listener for detecting when the bean in the bean
          * channel changes.
         ChangeListener beanChangeListener = new BeanChangeListener();
          * Subclass can override to create their bean change listener.
          * @return
         protected ChangeListener createBeanChangeListener() {
              return new BeanChangeListener();
         public BeanPropertyFactory(T bean) {
              setChannel(new ObjectProperty(bean));
         public Property getProperty(String property) {
              if (property == null || property.isEmpty())
                   throw new IllegalArgumentException("Property cannot be null");
              if (properties.containsKey(property))
                   return properties.get(property);
              CaptiveObjectProperty p = new CaptiveObjectProperty(this, property);
              properties.put(property, p);
              return p;
         @Override
         public T getValue() {
              return getBean();
          * A listener that listens for property change events on the bean. When the
          * bean changes, the listener must be removed then attached to the new bean
          * but can use the same instance of this class. The action is to inform any
          * existing property objects that the property has changed. The detection of
          * property changes is centralized in the factory class for efficiency.
         protected class BeanPropertyListener implements PropertyChangeListener {
              @Override
              public void propertyChange(PropertyChangeEvent evt) {
                   if (properties.containsKey(evt.getPropertyName())) {
                        CaptiveObjectProperty p = properties.get(evt.getPropertyName());
                        p.propertyChanged();
                   updateStringProperty(getBean());
          * The cached listener instance to listen to the bean (in the bean channel)
          * property change events if it supports PCL.
         PropertyChangeListener beanPropertyListener;
          * Subclasses can override to implement their own behavior. Its best to
          * extend from <code>BeanPropertyListiner</code> to include the default
          * behavior.
          * @return
         protected PropertyChangeListener createBeanPropertyListener() {
              return new BeanPropertyListener();
          * Add a listener only if the PCL methods exist. This listens for property
          * changes on the bean's property not changes in the actually bean held by
          * the bean channel.
         protected void addBeanPCLListener(Object obj) {
              if (!isListenForBeanPCLEvents())
                   return;
              if (obj != null) {
                   if (BeanPropertyUtils.hasPCL(obj.getClass())) {
                        if (beanPropertyListener == null)
                             beanPropertyListener = createBeanPropertyListener();
                        BeanPropertyUtils.addPCL(obj, beanPropertyListener, null);
          * Remove a listener only if the PCL methods exist.
          * @see #attachBeanPCLListener
         protected void removeBeanPCLListener(Object obj) {
              if (obj != null) {
                   if (BeanPropertyUtils.hasPCL(obj.getClass())) {
                        if (beanPropertyListener == null)
                             beanPropertyListener = createBeanPropertyListener();
                        BeanPropertyUtils.removePCL(obj, beanPropertyListener, null);
          * Invalidate the properties in the property cache. Then changed the bean in
          * the bean channel. Then fire a value changed event.
          * @param bean
         public void setBean(T bean) {
              invalidateProperties();
              if (getChannel() instanceof WritableValue) {
                   ((WritableValue) getChannel()).setValue(bean);
              } else {
                   throw new IllegalArgumentException(
                             "Could not set bean value into a non-writable bean channel");
              fireValueChangedEvent();
          * Called to indicate that the underlying bean changed.
         protected void invalidateProperties() {
              for (CaptiveObjectProperty p : properties.values()) {
                   p.invalidate();
         public T getBean() {
              return getChannel().getValue();
          * Lazily get the method representing the property prior to getting or
          * setting. Because this is a property, it can also be bound to.
          * @author Mr. Java
          * @param <T>
         protected static class CaptiveObjectProperty<T> extends
                   ObjectPropertyBase<T> {
               * The string name of the property.
              String readPropertyName, writePropertyName;
               * If the property is really a javafx property, it is stored here.
              Property<T> enhancedProperty;
               * Used if the property is not an enhanced property.
              Method readMethod, writeMethod;
               * The factory that holds the bean we obtain values against.
              BeanPropertyFactory factory;
              public CaptiveObjectProperty(BeanPropertyFactory factory,
                        String property) {
                   this.readPropertyName = property;
                   this.factory = factory;
              public CaptiveObjectProperty(BeanPropertyFactory factory,
                        String property, String writePropertyName) {
                   this.readPropertyName = property;
                   this.writePropertyName = writePropertyName;
                   this.factory = factory;
              @Override
              public Object getBean() {
                   if (factory == null || factory.getBean() == null)
                        return null;
                   return factory.getBean();
              @Override
              public void store(T value) {
                   if (writeMethod == null && enhancedProperty == null) {
                        getWriteMethod(value.getClass());
                   if (writeMethod == null && enhancedProperty == null) {
                        return;
                   try {
                        if (enhancedProperty != null) {
                             enhancedProperty.setValue(value);
                             return;
                        if (getBean() == null)
                             return;
                        writeMethod.invoke(getBean(), value);
                        return;
                   } catch (Exception e) {
                        e.printStackTrace();
              @Override
              public T getValue() {
                   if (readMethod == null && enhancedProperty == null) {
                        getReadMethod();
                   if (readMethod == null && enhancedProperty == null)
                        return null;
                   try {
                        if (enhancedProperty != null)
                             return enhancedProperty.getValue();
                        if (factory.getBean() == null)
                             return null;
                        Object rval = readMethod.invoke(getBean());
                        return (T) rval;
                   } catch (Exception e) {
                        e.printStackTrace();
                   return null;
              @Override
              public String getName() {
                   return readPropertyName;
               * Invalidate the method. Perhaps the bean changed to another object and
               * we should find the method on the new object. This is called prior to
               * the <code>getBean()</code> being changed.
              public void invalidate() {
                   readMethod = null;
                   fireValueChangedEvent();
               * This is used to externally signal that the property has changed. It
               * is quite possible that this object does not detect those changes and
               * hence, an external object (in all cases the BeanPropertyFactory) will
               * signal when a change occurs. Property change detection is centralized
               * in the factory for efficiency reasons.
              public void propertyChanged() {
                   fireValueChangedEvent();
              protected Property getJavaFXReadProperty(String propertyName) {
                   if (factory.getBean() == null)
                        return null;
                   String methodName = getName() + "Property";
                   try {
                        Method mtmp = factory.getBean().getClass()
                                  .getMethod(methodName, new Class<?>[0]);
                        enhancedProperty = (Property) mtmp.invoke(factory.getBean(),
                                  new Object[0]);
                        return enhancedProperty;
                   } catch (Exception e) {
                        // e.printStackTrace();
                        // silently fail here
                   return null;
              protected void getWriteMethod(Class<?> argType) {
                   if (factory == null || factory.getBean() == null)
                        return;
                   if (enhancedProperty == null)
                        enhancedProperty = getJavaFXReadProperty(getName());
                   if (enhancedProperty != null)
                        return;
                   writeMethod = getPojoWriteMethod(getName(), argType);
               * Sets the method, either an enhanced property or the POJO method via
               * reflection.
               * @return
              protected void getReadMethod() {
                   if (factory == null || factory.getBean() == null)
                        return;
                   enhancedProperty = getJavaFXReadProperty(getName());
                   if (enhancedProperty != null)
                        return;
                   // Look for standard pojo method.
                   readMethod = getPOJOReadMethod(getName());
               * Return a get method using reflection.
               * @param propertyName
               * @return
              protected Method getPOJOReadMethod(String propertyName) {
                   if (factory.getBean() == null)
                        return null;
                   // Look for standard pojo method.
                   String methodName = getGetMethodName();
                   try {
                        Method mtmp = factory.getBean().getClass()
                                  .getMethod(methodName, new Class<?>[0]);
                        return mtmp;
                   } catch (Exception e) {
                        // silently fail here
                        // e.printStackTrace();
                   return null;
              protected String getGetMethodName() {
                   String methodName = "get"
                             + Character.toUpperCase(getName().charAt(0));
                   if (getName().length() > 1)
                        methodName += getName().substring(1);
                   return methodName;
               * Return a set method using reflection.
               * @param propertyName
               * @param argType
               * @return
              protected Method getPojoWriteMethod(String propertyName,
                        Class<?> argType) {
                   if (factory.getBean() == null)
                        return null;
                   String methodName = getSetMethodName();
                   try {
                        Method mtmp = factory.getBean().getClass()
                                  .getMethod(methodName, argType);
                        return mtmp;
                   } catch (Exception e) {
                        // silently fail here
                        // e.printStackTrace();
                   return null;
              protected String getSetMethodName() {
                   String methodName = "set"
                             + Character.toUpperCase(getName().charAt(0));
                   if (getName().length() > 1)
                        methodName += getName().substring(1);
                   return methodName;
          * Obtain a property using the binding path. The binding path should be
          * simple property names separated by a dot. The bean has to specified
          * because the return value is a property that can be used directly for
          * binding. The first property specified in the binding path should be a
          * property on the bean.
          * <p>
          * The difference between this and <code>Bindings.select()</code> is not
          * much other that it uses the bean factory machinery and the path can be
          * specified as a string. Of course, the bean can be a plain pojo.
          * @param bindingPath
          * @return
         public static Property propertyFromBindingPath(Object bean,
                   String bindingPath) {
              if (bindingPath == null || bindingPath.isEmpty())
                   return null;
              BeanPropertyFactory lastFactory = null;
              Property lastProperty = null;
              String[] parts = bindingPath.split("\\.");
              if (parts.length > 0) {
                   for (int i = 0; i < parts.length; i++) {
                        if (parts.length() <= 0 || parts[i].isEmpty()) {
                             throw new IllegalArgumentException("Binding path part " + i
                                       + " has no length");
                        BeanPropertyFactory newFactory;
                        if (i == 0)
                             newFactory = new BeanPropertyFactory(bean);
                        else
                             newFactory = new BeanPropertyFactory(
                                       (WritableValue) lastProperty);
                        lastProperty = newFactory.getProperty(parts[i].trim());
                        lastFactory = newFactory;
              return lastProperty;
         * Alot like <code>Bindings.select</code> but also handles pojos.
         * @param bean
         * @param path
         * @return
         public static Property propertyFromBindingPath(Object bean, String... path) {
              String tmp = "";
              for (int i = 0; i < path.length; i++) {
                   tmp += path[i];
                   if (i <= path.length - 1)
                        tmp += ".";
              return propertyFromBindingPath(bean, tmp);
    and a supporting classpackage scenegraphdemo;
    import java.beans.PropertyChangeListener;
    * Static methods for manipulating PCL for standard java beans.
    * @author Mr. Java
    public class BeanPropertyUtils {
         protected final static Class<?>[] NO_ARGS = new Class<?>[] { PropertyChangeListener.class };
         protected final static Class<?>[] ARGS = new Class<?>[] { String.class,
                   PropertyChangeListener.class };
         protected final static String pclAddMethodName = "addPropertyChangeListener";
         protected final static String pclRemoveMethodName = "removePropertyChangeListener";
         * Return true if the class has PCL methods. Does not check for remove.
         * <p>
         * addPropertyChangeListener(PropertyChangeListener)
         * <p>
         * addPropertyChangeListener(String, PropertyChangeListener)
         * @param bean
         * @return
         public static boolean hasPCL(Class<?> clazz) {
              try {
                   if (clazz.getMethod(pclAddMethodName, NO_ARGS) != null) {
                        return true;
              } catch (Exception e) {
                   // silently fail
              try {
                   if (clazz.getMethod(pclAddMethodName, ARGS) != null) {
                        return true;
              } catch (Exception e) {
                   // silently fail
              return false;
         * Add a listener.
         * @param bean
         * @param listener
         * @param propertyName
         public static void addPCL(Object bean, PropertyChangeListener listener,
                   String propertyName) {
              try {
                   if (propertyName == null) {
                        bean.getClass().getMethod(pclAddMethodName, NO_ARGS)
                                  .invoke(bean, new Object[] { listener });
                   } else {
                        bean.getClass()
                                  .getMethod(pclAddMethodName, ARGS)
                                  .invoke(bean,
                                            new Object[] { propertyName, listener });
              } catch (Exception e) {
                   e.printStackTrace();
         * Remove a listener.
         * @param bean
         * @param listener
         * @param propertyName
         public static void removePCL(Object bean, PropertyChangeListener listener,
                   String propertyName) {
              try {
                   if (propertyName == null) {
                        bean.getClass().getMethod(pclRemoveMethodName, NO_ARGS)
                                  .invoke(bean, new Object[] { listener });
                   } else {
                        bean.getClass()
                                  .getMethod(pclRemoveMethodName, ARGS)
                                  .invoke(bean,
                                            new Object[] { propertyName, listener });
              } catch (Exception e) {
                   e.printStackTrace();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

  • Listener calls Function plus Arguments??

    Hi guys,
    Not sure if there's an easy way to do this, I'd like a
    listener to call a function with arguments when triggered.
    Currently, what I have looks like this:
    object.addEventListener(errorTrigger, functionToCall);
    public function functionToCall():void {
    ...you get my idea...
    And, I'd really like to add some arguments to the function. I
    realize that if I use:
    object.addEventListener(errorTrigger,
    functionToCall(myArgument));
    then it will want
    functionToCall to
    return a
    function name to be used. Hopefully, you're still with me on
    this...
    The reason I want to add the arguments, is because I have
    three different listeners.
    And I'd rather not have three different functions to deal
    with them, I'd rather consolidate it into one function and use the
    argument to distinguish the difference.
    Rather than:
    object.listener(error1, function1);
    object.listener(error2, function2);
    object.listener(error3, function3);
    function1 ():void {}
    function1 ():void {}
    function1 ():void {}
    I'd prefer something like:
    object.listener(error1, function(1));
    object.listener(error2, function(2));
    object.listener(error3, function(3));
    function(num):void {}
    Hopefully, that all makes sense. Sorry, I'd post the code,
    but it's way to long, and I'd rather not confuse anyone with
    something else contained within it.
    More than happy to try and cut it down if someone needs to
    see the code though.
    Cheers
    Oz

    Thanks for your efforts, I don't quite know whether it's what
    I'm looking for though.
    The events I am using are predefined by Flex's upload
    function. So, this may help:
    fileUpload.addEventListener(HTTPStatusEvent.HTTP_STATUS,
    uploadError);
    fileUpload.addEventListener(IOErrorEvent.IO_ERROR,
    uploadError);
    fileUpload.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
    uploadError);
    And I'd really like to add the parameters to the end, like
    so:
    fileUpload.addEventListener(HTTPStatusEvent.HTTP_STATUS,
    uploadError(param));
    fileUpload.addEventListener(IOErrorEvent.IO_ERROR,
    uploadError(param));
    fileUpload.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
    uploadError(param));
    Is this something that I have to cast to / extend apon the
    existing events using your technique above? In essence, creating a
    duplicate of this event?
    Thanks
    Oz.

  • What is a Listener

    Do anyone in here know whats Listener? I would like to know
    more about it.

    evomind,
    > Do anyone in here know whats Listener? I would like to
    > know more about it.
    A listener is a concept -- just one way to handle an event
    in
    ActionScript. In ActionScript 2.0, for example, you could use
    a listener
    like this:
    var listener:Object = new Object();
    listener.onKeyUp = function():Void {
    trace("A key has been pressed");
    Key.addListener(listener);
    The variable, listener, is named arbitrarily. It could be
    "monkeys," if
    you like -- but "listener" makes sense, because that's what
    this object is
    doing. It's "listening" for an onKeyUp event on behalf of the
    Key class, to
    which that event actually belongs.
    David Stiller
    Adobe Community Expert
    Dev blog,
    http://www.quip.net/blog/
    "Luck is the residue of good design."

  • External Listener Classes

    Hello,
    I have some quires about the Externer Listener classes. They are:
    1. Can one listener classes have two(2) Port numbers to listen
    2. If i had made a external listener classes as a service object and made
    for Load Balance then do External Listener object listens on different port
    number's.
    Thanks in Advance
    prabhu
    FREE Email for ALL! Sign up at http://www.mail.com

    is Class1 even defined in your main swf?
    if that class is defined in the external swf, you need to use the applicationDomain of your loaded swf to access that class.  for example, in your complete listener:
    var loadedAppDomain:ApplicationDomain = e.target.content.loaderInfo.applicationDomain;  // where e is your complete event
    var C1:Class = loadedAppDomain.getDefinition("Class1") as Class;
    check (objectsList[0] is C1)

  • TcpListener not working on Azure: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host

    Hi Everybody,
    i'm playing a little bit with Windows Azure and I'm blocked with a really simple issue (or maybe not).
    I've created a Cloud Service containing one simple Worker Role. I've configured an EndPoint in the WorkerRole configuration, which allows Input connections via tcp on port 10100.
    Here the ServiceDefinition.csdef file content:
    <?xml version="1.0" encoding="utf-8"?>
    <ServiceDefinition name="EmacCloudService" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2014-01.2.3">
    <WorkerRole name="TcpListenerWorkerRole" vmsize="Small">
    <Imports>
    <Import moduleName="Diagnostics" />
    <Import moduleName="RemoteAccess" />
    <Import moduleName="RemoteForwarder" />
    </Imports>
    <Endpoints>
    <InputEndpoint name="Endpoint1" protocol="tcp" port="10100" />
    </Endpoints>
    </WorkerRole>
    </ServiceDefinition>
    This WorkerRole is just creating a TcpListener object listening to the configured port (using the RoleEnvironment instance) and waits for an incoming connection. It receives a message and returns a hardcoded message (see code snippet below).
    namespace TcpListenerWorkerRole
    using System;
    using System.Net;
    using Microsoft.WindowsAzure.ServiceRuntime;
    using System.Net.Sockets;
    using System.Text;
    using Roche.Emac.Infrastructure;
    using System.IO;
    using System.Threading.Tasks;
    using Microsoft.WindowsAzure.Diagnostics;
    using System.Linq;
    public class WorkerRole : RoleEntryPoint
    public override void Run()
    // This is a sample worker implementation. Replace with your logic.
    LoggingProvider.Logger.Info("TcpListenerWorkerRole entry point called");
    TcpListener listener = null;
    try
    listener = new TcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint);
    listener.ExclusiveAddressUse = false;
    listener.Start();
    LoggingProvider.Logger.Info(string.Format("TcpListener started at '{0}:{1}'", RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint.Address, RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint.Port));
    catch (SocketException ex)
    LoggingProvider.Logger.Exception("Unexpected exception while creating the TcpListener", ex);
    return;
    while (true)
    Task.Run(async () =>
    TcpClient client = await listener.AcceptTcpClientAsync();
    LoggingProvider.Logger.Info(string.Format("Client connected. Address='{0}'", client.Client.RemoteEndPoint.ToString()));
    NetworkStream networkStream = client.GetStream();
    StreamReader reader = new StreamReader(networkStream);
    StreamWriter writer = new StreamWriter(networkStream);
    writer.AutoFlush = true;
    string input = string.Empty;
    while (true)
    try
    char[] receivedChars = new char[client.ReceiveBufferSize];
    LoggingProvider.Logger.Info("Buffer size: " + client.ReceiveBufferSize);
    int readedChars = reader.Read(receivedChars, 0, client.ReceiveBufferSize);
    char[] validChars = new char[readedChars];
    Array.ConstrainedCopy(receivedChars, 0, validChars, 0, readedChars);
    input = new string(validChars);
    LoggingProvider.Logger.Info("This is what the host sent to you: " + input+". Readed chars=" + readedChars);
    try
    string orderResultFormat = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("\xB")) + @"MSH|^~\&|Instrument|Laboratory|LIS|LIS Facility|20120427123212+0100||ORL^O34^ORL_O34| 11|P|2.5.1||||||UNICODE UTF-8|||LAB-28^IHE" + Environment.NewLine + "MSA|AA|10" + Environment.NewLine + @"PID|||patientId||""""||19700101|M" + Environment.NewLine + "SPM|1|sampleId&ROCHE||ORH^^HL70487|||||||P^^HL70369" + Environment.NewLine + "SAC|||sampleId" + Environment.NewLine + "ORC|OK|orderId|||SC||||20120427123212" + Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("\x1c\x0d"));
    writer.Write(orderResultFormat);
    catch (Exception e)
    LoggingProvider.Logger.Exception("Unexpected exception while writting the response", e);
    client.Close();
    break;
    catch (Exception ex)
    LoggingProvider.Logger.Exception("Unexpected exception while Reading the request", ex);
    client.Close();
    break;
    }).Wait();
    public override bool OnStart()
    // Set the maximum number of concurrent connections
    ServicePointManager.DefaultConnectionLimit = 12;
    DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
    RoleEnvironment.Changing += RoleEnvironment_Changing;
    return base.OnStart();
    private void RoleEnvironment_Changing(object sender, RoleEnvironmentChangingEventArgs e)
    // If a configuration setting is changing
    LoggingProvider.Logger.Info("RoleEnvironment is changing....");
    if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange))
    // Set e.Cancel to true to restart this role instance
    e.Cancel = true;
    As you can see, nothing special is being done. I've used the RoleEnvironment.CurrentRoleInstance.InstanceEndpoints to retrieve the current IPEndpoint.
    Running the Cloud Service in the Windows Azure Compute Emulator everything works fine, but when I deploy it in Azure, then I receive the following Exception:
    2014-08-06 14:55:23,816 [Role Start Thread] INFO EMAC Log - TcpListenerWorkerRole entry point called
    2014-08-06 14:55:24,145 [Role Start Thread] INFO EMAC Log - TcpListener started at '100.74.10.55:10100'
    2014-08-06 15:06:19,375 [9] INFO EMAC Log - Client connected. Address='196.3.50.254:51934'
    2014-08-06 15:06:19,375 [9] INFO EMAC Log - Buffer size: 65536
    2014-08-06 15:06:45,491 [9] FATAL EMAC Log - Unexpected exception while Reading the request
    System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    --- End of inner exception stack trace ---
    at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
    at System.IO.StreamReader.ReadBuffer(Char[] userBuffer, Int32 userOffset, Int32 desiredChars, Boolean& readToUserBuffer)
    at System.IO.StreamReader.Read(Char[] buffer, Int32 index, Int32 count)
    at TcpListenerWorkerRole.WorkerRole.<>c__DisplayClass0.<<Run>b__2>d__0.MoveNext() in C:\Work\Own projects\EMAC\AzureCloudEmac\TcpListenerWorkerRole\WorkerRole.cs:line 60
    I've already tried to configure an internal port in the ServiceDefinition.csdef file, but I get the same exception there.
    As you can see, the client can connect to the service (the log shows the message: Client connected with the address) but when it tries to read the bytes from the stream, it throws the exception.
    For me it seems like Azure is preventing the retrieval of the message. I've tried to disable the Firewall in the VM in Azure and the same continues happening.
    I'm using Windows Azure SDK 2.3
    Any help will be very very welcome!
    Thanks in advance!
    Javier
    En caso de que la respuesta te sirva, porfavor, márcala como válida
    Muchas gracias y suerte!
    Javier Jiménez Roda
    Blog: http://jimenezroda.wordpress.com

    hi Javier,
    I changed your code like this:
    private AutoResetEvent connectionWaitHandle = new AutoResetEvent(false);
    public override void Run()
    TcpListener listener = null;
    try
    listener = new TcpListener(
    RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint"].IPEndpoint);
    listener.ExclusiveAddressUse = false;
    listener.Start();
    catch (SocketException se)
    return;
    while (true)
    IAsyncResult result = listener.BeginAcceptTcpClient(HandleAsyncConnection, listener);
    connectionWaitHandle.WaitOne();
    The HandleAsync method is your "While (true)" code:
    private void HandleAsyncConnection(IAsyncResult result)
    TcpListener listener = (TcpListener)result.AsyncState;
    TcpClient client = listener.EndAcceptTcpClient(result);
    connectionWaitHandle.Set();
    NetworkStream netStream = client.GetStream();
    StreamReader reader = new StreamReader(netStream);
    StreamWriter writer = new StreamWriter(netStream);
    writer.AutoFlush = true;
    string input = string.Empty;
    try
    char[] receivedChars = new char[client.ReceiveBufferSize];
    // LoggingProvider.Logger.Info("Buffer size: " + client.ReceiveBufferSize);
    int readedChars = reader.Read(receivedChars, 0, client.ReceiveBufferSize);
    char[] validChars = new char[readedChars];
    Array.ConstrainedCopy(receivedChars, 0, validChars, 0, readedChars);
    input = new string(validChars);
    // LoggingProvider.Logger.Info("This is what the host sent to you: " + input + ". Readed chars=" + readedChars);
    try
    string orderResultFormat = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("\xB")) + @"MSH|^~\&|Instrument|Laboratory|LIS|LIS Facility|20120427123212+0100||ORL^O34^ORL_O34| 11|P|2.5.1||||||UNICODE UTF-8|||LAB-28^IHE" + Environment.NewLine + "MSA|AA|10" + Environment.NewLine + @"PID|||patientId||""""||19700101|M" + Environment.NewLine + "SPM|1|sampleId&ROCHE||ORH^^HL70487|||||||P^^HL70369" + Environment.NewLine + "SAC|||sampleId" + Environment.NewLine + "ORC|OK|orderId|||SC||||20120427123212" + Encoding.ASCII.GetString(Encoding.ASCII.GetBytes("\x1c\x0d"));
    writer.Write(orderResultFormat);
    catch (Exception e)
    // LoggingProvider.Logger.Exception("Unexpected exception while writting the response", e);
    client.Close();
    catch (Exception ex)
    //LoggingProvider.Logger.Exception("Unexpected exception while Reading the request", ex);
    client.Close();
    Please try it. For this error message, I suggest you could refer to this thread (http://stackoverflow.com/questions/6173763/using-windows-azure-to-use-as-a-tcp-server
    ) and this post (http://stackoverflow.com/a/5420788).
    Regards,
    Will
    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click
    HERE to participate the survey.

  • How to open a new window by clicking the string in the text field ?

    Hi
    is it possible to do this ?
    Some string value is retrieved from database and it is placed in the text field. [ done with this part ]
    i have to provide link to that string to open a new window. [ yet to do ]
    Please help me in this.
    Note : if this is not possible , give me some other idea to do this.
    -Arun

    whether this is useful ?
    I am using string field here.
    public StringField(java.lang.String name,
    java.lang.Object listener,
    java.lang.String callback,
    java.lang.String value)Constructs a StringField
    Parameters:
    name - Name of field
    listener - Listener to update
    callback - Callback of listener
    value - Value of field
    -Arun

  • HELP... How can i implement this into my code

    Hello :) I'm writing a simple game here is the code now all it does right now is it writes out the values of the cards on the screen in an applet however I want it to display card images from http://www.waste.org/~oxymoron/cards
    i can't get it to use the string values and give me the card images instead of simple text... please help a woman in trouble ;O) thank you
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    //import java.applet.*;
    ///import java.util.*;
    public class HighLowGUI extends JApplet {
       public void init() {
             // The init() method lays out the applet.
             // A HighLowCanvas occupies the CENTER position of the layout.
             // On the bottom is a panel that holds three buttons.  The
             // HighLowCanvas object listens for ActionEvents from the
             // buttons and does all the real work of the program.
          setBackground( new Color(130,50,40) );
          HighLowCanvas board = new HighLowCanvas();
          getContentPane().add(board, BorderLayout.CENTER);
          JPanel buttonPanel = new JPanel();
          buttonPanel.setBackground( new Color(220,200,180) );
          getContentPane().add(buttonPanel, BorderLayout.SOUTH);
          JButton higher = new JButton( "Deal" );
          higher.addActionListener(board);
          buttonPanel.add(higher);
          JButton newGame = new JButton( "New Game" );
          newGame.addActionListener(board);
          buttonPanel.add(newGame);
       }  // end init()
       class HighLowCanvas extends JPanel implements ActionListener {
            // A nested class that displays the cards and does all the work
             // of keeping track of the state and responding to user events.
          Deck deck;       // A deck of cards to be used in the game.
          Hand hand;       // The cards that have been dealt.
          String message;  // A message drawn on the canvas, which changes
                           //    to reflect the state of the game.
          boolean gameInProgress;  // Set to true when a game begins and to false
                                   //   when the game ends.
          Font bigFont;      // Font that will be used to display the message.
          Font smallFont;    // Font that will be used to draw the cards.
          HighLowCanvas() {
                // Constructor.  Creates sets the foreground and
                // background colors, and starts the first game.
          setBackground( new Color(0,120,0) );
             setForeground( Color.yellow);
                     //  smallFont = new Font("SansSerif", Font.PLAIN, 12);
                      // bigFont = new Font("Serif", Font.BOLD, 14);
            doNewGame();
          } // end constructor
          public void actionPerformed(ActionEvent evt) {
                 // Respond when the user clicks on a button by calling
                 // the appropriate procedure.  Note that the canvas is
                 // registered as a listener in applet's init() method.
             String command = evt.getActionCommand();
             if (command.equals("Deal"))
                doDeal();
             else if (command.equals("New Game"))
                doNewGame();
          } // end actionPerformed()
          void doDeal() {
                   // Called by actionPerformmed() when user clicks "Higher" button.
                   // Check the user's prediction.  Game ends if user guessed
                   // wrong or if the user has made three correct predictions.
             if (gameInProgress == false) {
                   // If the game has ended, it was an error to click "Higher",
                   // So set up an error message and abort processing.
                message = "Click \"New Game\" to start a new game!";
                repaint();
                return;
             hand.addCard( deck.dealCard() );     // Deal a card to the hand.
             int cardCt = hand.getCardCount();
             Card thisCard = hand.getCard( cardCt - 1 );  // Card just dealt.
             Card prevCard = hand.getCard( cardCt - 2 );  // The previous card.
             if ( thisCard.getValue() < prevCard.getValue() ) {
                gameInProgress = false;
                message = "Too bad! You lose.";
             else if ( thisCard.getValue() == prevCard.getValue() ) {
                gameInProgress = false;
                message = "Too bad!  You lose"; // on ties
             else if ( cardCt == 4) {    //CHANGED+++++++++++++++++=
                gameInProgress = false;
               message = "You win! Hurra! ";
             else {
                message = "Got it right!  Try for " + cardCt + " Press  -Deal- ";
             repaint();
          } // end
          void doNewGame() {
                 // Called by the constructor, and called by actionPerformed() if
                 // the use clicks the "New Game" button.  Start a new game.
             if (gameInProgress) {
                     // If the current game is not over, it is an error to try
                     // to start a new game.
                message = "You still have to finish this game! Press   -Deal-";
                repaint();
                return;
             deck = new Deck();   // Create the deck and hand to use for this game.
             hand = new Hand();
             deck.shuffle();
             hand.addCard( deck.dealCard() );  // Deal the first card into the hand.
             message = "Deal your cards";
             gameInProgress = true;
             repaint();
          } // end doNewGame()
          public void paintComponent(Graphics g) {
                // This method draws the message at the bottom of the
                // canvas, and it draws all of the dealt cards spread out
                // across the canvas.  If the game is in progress, an
                // extra card is dealt representing the card to be dealt next.
             super.paintComponent(g);
                  g.setFont(bigFont);
                  g.drawString(message,10,135);
                  g.setFont(smallFont);
             int cardCt = hand.getCardCount();
                  for (int i = 0; i < cardCt; i++)
                        drawCard(g, hand.getCard(i), 10 + i * 90, 10);
             if (gameInProgress)
                drawCard(g, null, 10 + cardCt * 90, 10);
          } // end paintComponent()
          void drawCard(Graphics g, Card card, int x, int y) {
                  // Draws a card as a 80 by 100 rectangle with
                  // upper left corner at (x,y).  The card is drawn
                  // in the graphics context g.  If card is null, then
                  // a face-down card is drawn.  (The cards are
                  // rather primitive.)
             if (card == null) {      // Draw a face-down card
                g.setColor(Color.blue);
                g.fillRect(x,y,80,100);
                g.setColor(Color.white);
                g.drawRect(x+3,y+3,73,93);
                g.drawRect(x+4,y+4,71,91);
             else {
                g.setColor(Color.white);
                g.fillRect(x,y,80,100);
                g.setColor(Color.gray);
                g.drawRect(x,y,79,99);
                g.drawRect(x+1,y+1,77,97);
             if (card.getSuit() == Card.DIAMONDS || card.getSuit() == Card.HEARTS)
                g.setColor(Color.red);
             else
                g.setColor(Color.black);
                g.drawString(card.getValueAsString(), x + 10, y + 30);
                g.drawString("of", x+ 10, y + 50);
                g.drawString(card.getSuitAsString(), x + 10, y + 70);
          } // end drawCard()
       } // end nested class HighLowCanvas
    } // end class HighLowGUI
       An object of class card represents one of the 52 cards in a
       standard deck of playing cards.  Each card has a suit and
       a value.
    public class Card {
        public final static int SPADES = 0,       // Codes for the 4 suits.
                                HEARTS = 1,
                                DIAMONDS = 2,
                                CLUBS = 3;
        public final static int ACE = 1,          // Codes for the non-numeric cards.
                                JACK = 11,        //   Cards 2 through 10 have their
                                QUEEN = 12,       //   numerical values for their codes.
                                KING = 13;
        private final int suit;   // The suit of this card, one of the constants
                                  //    SPADES, HEARTS, DIAMONDS, CLUBS.
        private final int value;  // The value of this card, from 1 to 11.
        public Card(int theValue, int theSuit) {
                // Construct a card with the specified value and suit.
                // Value must be between 1 and 13.  Suit must be between
                // 0 and 3.  If the parameters are outside these ranges,
                // the constructed card object will be invalid.
            value = theValue;
            suit = theSuit;
        public int getSuit() {
                // Return the int that codes for this card's suit.
            return suit;
        public int getValue() {
                // Return the int that codes for this card's value.
            return value;
        public String getSuitAsString() {
                // Return a String representing the card's suit.
                // (If the card's suit is invalid, "??" is returned.)
            switch ( suit ) {
               case SPADES:   return "Spades";
               case HEARTS:   return "Hearts";
               case DIAMONDS: return "Diamonds";
               case CLUBS:    return "Clubs";
               default:       return "??";
        public String getValueAsString() {
                // Return a String representing the card's value.
                // If the card's value is invalid, "??" is returned.
            switch ( value ) {
               case 1:   return "A";
               case 2:   return "2";
               case 3:   return "3";
               case 4:   return "4";
               case 5:   return "5";
               case 6:   return "6";
               case 7:   return "7";
               case 8:   return "8";
               case 9:   return "9";
               case 10:  return "10";
               case 11:  return "J";
               case 12:  return "Q";
               case 13:  return "K";
               default:  return "??";
        public String toString() {
               // Return a String representation of this card, such as
               // "10 of Hearts" or "Queen of Spades".
            return getValueAsString() + " of " + getSuitAsString();
    } // end class Card
        An object of type Deck represents an ordinary deck of 52 playing cards.
        The deck can be shuffled, and cards can be dealt from the deck.
    public class Deck {
        private Card[] deck;   // An array of 52 Cards, representing the deck.
        private int cardsUsed; // How many cards have been dealt from the deck.
        public Deck() {       // Create an unshuffled deck of cards.
           deck = new Card[52];
           int cardCt = 0;    // How many cards have been created so far.
           for ( int suit = 0; suit <= 3; suit++ ) {
              for ( int value = 1; value <= 13; value++ ) {
                 deck[cardCt] = new Card(value,suit);
                 cardCt++;
           cardsUsed = 0;
        public void shuffle() {
              // Put all the used cards back into the deck, and shuffle it into
              // a random order.
            for ( int i = 51; i > 0; i-- ) {
                int rand = (int)(Math.random()*(i+1));
                Card temp = deck;
    deck[i] = deck[rand];
    deck[rand] = temp;
    cardsUsed = 0;
    public int cardsLeft() {
    // As cards are dealt from the deck, the number of cards left
    // decreases. This function returns the number of cards that
    // are still left in the deck.
    return 52 - cardsUsed;
    public Card dealCard() {
    // Deals one card from the deck and returns it.
    if (cardsUsed == 52)
    shuffle();
    cardsUsed++;
    return deck[cardsUsed - 1];
    } // end class Deck
    An object of type Hand represents a hand of cards. The maximum number of
    cards in the hand can be specified in the constructor, but by default
    is 5. A utility function is provided for computing the value of the
    hand in the game of Blackjack.
    import java.util.Vector;
    public class Hand {
    private Vector hand; // The cards in the hand.
    public Hand() {
    // Create a Hand object that is initially empty.
    hand = new Vector();
    public void clear() {
    // Discard all the cards from the hand.
    hand.removeAllElements();
    public void addCard(Card c) {
    // Add the card c to the hand. c should be non-null. (If c is
    // null, nothing is added to the hand.)
    if (c != null)
    hand.addElement(c);
    public void removeCard(Card c) {
    // If the specified card is in the hand, it is removed.
    hand.removeElement(c);
    public void removeCard(int position) {
    // If the specified position is a valid position in the hand,
    // then the card in that position is removed.
    if (position >= 0 && position < hand.size())
    hand.removeElementAt(position);
    public int getCardCount() {
    // Return the number of cards in the hand.
    return hand.size();
    public Card getCard(int position) {
    // Get the card from the hand in given position, where positions
    // are numbered starting from 0. If the specified position is
    // not the position number of a card in the hand, then null
    // is returned.
    if (position >= 0 && position < hand.size())
    return (Card)hand.elementAt(position);
    else
    return null;
    public void sortBySuit() {
    // Sorts the cards in the hand so that cards of the same suit are
    // grouped together, and within a suit the cards are sorted by value.
    // Note that aces are considered to have the lowest value, 1.
    Vector newHand = new Vector();
    while (hand.size() > 0) {
    int pos = 0; // Position of minimal card.
    Card c = (Card)hand.elementAt(0); // Minumal card.
    for (int i = 1; i < hand.size(); i++) {
    Card c1 = (Card)hand.elementAt(i);
    if ( c1.getSuit() < c.getSuit() ||
    (c1.getSuit() == c.getSuit() && c1.getValue() < c.getValue()) ) {
    pos = i;
    c = c1;
    hand.removeElementAt(pos);
    newHand.addElement(c);
    hand = newHand;
    public void sortByValue() {
    // Sorts the cards in the hand so that cards of the same value are
    // grouped together. Cards with the same value are sorted by suit.
    // Note that aces are considered to have the lowest value, 1.
    Vector newHand = new Vector();
    while (hand.size() > 0) {
    int pos = 0; // Position of minimal card.
    Card c = (Card)hand.elementAt(0); // Minumal card.
    for (int i = 1; i < hand.size(); i++) {
    Card c1 = (Card)hand.elementAt(i);
    if ( c1.getValue() < c.getValue() ||
    (c1.getValue() == c.getValue() && c1.getSuit() < c.getSuit()) ) {
    pos = i;
    c = c1;
    hand.removeElementAt(pos);
    newHand.addElement(c);
    hand = newHand;

    Please don't crosspost. It cuts down on the effectiveness of responses, leads to people wasting their time answering what others have already answered, makes for difficult discussion, and is generally just annoying and bad form.

  • Problem loading window component more than once

    I have a swf with a button that opens a window component
    (from my library). it loads fine and also closes fine when I click
    the close button in the window. but when I try to open the window
    again, it actually loads again, but it stalls and locks up
    immediatley. can anybody tell me what is wrong with my code? I also
    was going to have different buttons to open different windows (each
    swf playing a song and has written lyrics). it does the same thing
    when i load the first window, close it, then try to open a second
    window. it stalls and locks up.
    please, I really need some help!

    Ok it sort of works... here is my code:
    on (release) {
    trace("button works");
    win.title = "Yellow Birthday Package";
    win.closeButton = true;
    win.contentPath = "yellowPack";
    win.setSize(550,500);
    var listener:Object = new Object();
    listener.click = function(){
    win._visible = false;
    win.addEventListener("click",listener);
    It order to make it work, the window component has to be on the stage but i want it to popup only when the user clicks on the button. So the window should be hidden/invisible when the page first loads. I tried changing win._visible = true; but that did nothing.
    The other problem is that the movie clip inside the window, isnt aligning center. i can only see a corner of the movie clip. in the top left. I havent tested the whole thing live though!

  • How do i make Images show ?

    Hello :) I'm writing a simple game but I am having so much trouble with it :( here is the code now all it does right now is it writes out the values of the cards on the screen in an applet however I want it to display card images from http://www.waste.org/~oxymoron/cards
    i can't get it to use the string values and give me the card images instead of text... please help a woman in trouble ;O) thank you
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    //import java.applet.*;
    ///import java.util.*;
    public class HighLowGUI extends JApplet {
    //private HighLowGUI label = new HighLowGUI("Socrates");      // CyberPet
        //private JLabel nameLabel = new JLabel("Hi! My name is ");
        //private TextField stateField = new TextField(12);      // A TextField
       public void init() {
             // The init() method lays out the applet.
             // A HighLowCanvas occupies the CENTER position of the layout.
             // On the bottom is a panel that holds three buttons.  The
             // HighLowCanvas object listens for ActionEvents from the
             // buttons and does all the real work of the program.
          setBackground( new Color(130,50,40) );
          HighLowCanvas board = new HighLowCanvas();
          getContentPane().add(board, BorderLayout.CENTER);
          JPanel buttonPanel = new JPanel();
          buttonPanel.setBackground( new Color(220,200,180) );
          getContentPane().add(buttonPanel, BorderLayout.SOUTH);
          JButton higher = new JButton( "Deal" );
          higher.addActionListener(board);
          buttonPanel.add(higher);
          JButton newGame = new JButton( "New Game" );
          newGame.addActionListener(board);
          buttonPanel.add(newGame);
         // JLabel nameLabel = new JLabel("Hi! My name is ");
       }  // end init()
       class HighLowCanvas extends JPanel implements ActionListener {
             private Image eatImg, eat2Img, sleepImg, happyImg;     // Images for animation
            // A nested class that displays the cards and does all the work
             // of keeping track of the state and responding to user events.
          Deck deck;       // A deck of cards to be used in the game.
          Hand hand;       // The cards that have been dealt.
          String message;  // A message drawn on the canvas, which changes
                           //    to reflect the state of the game.
          boolean gameInProgress;  // Set to true when a game begins and to false
                                   //   when the game ends.
          Font bigFont;      // Font that will be used to display the message.
          Font smallFont;    // Font that will be used to draw the cards.
          HighLowCanvas() {
                // Constructor.  Creates sets the foreground and
                // background colors, and starts the first game.
          setBackground( new Color(0,120,0) );
             setForeground( Color.yellow);
                     //  smallFont = new Font("SansSerif", Font.PLAIN, 12);
                      // bigFont = new Font("Serif", Font.BOLD, 14);
            doNewGame();
          } // end constructor
          public void actionPerformed(ActionEvent evt) {
                 // Respond when the user clicks on a button by calling
                 // the appropriate procedure.  Note that the canvas is
                 // registered as a listener in applet's init() method.
             String command = evt.getActionCommand();
             if (command.equals("Deal"))
                doDeal();
             else if (command.equals("New Game"))
                doNewGame();
          } // end actionPerformed()
          void doDeal() {
                   // Called by actionPerformmed() when user clicks "Higher" button.
                   // Check the user's prediction.  Game ends if user guessed
                   // wrong or if the user has made three correct predictions.
             if (gameInProgress == false) {
                   // If the game has ended, it was an error to click "Higher",
                   // So set up an error message and abort processing.
                message = "Click \"New Game\" to start a new game!";
                repaint();
                return;
             hand.addCard( deck.dealCard() );     // Deal a card to the hand.
             int cardCt = hand.getCardCount();
             Card thisCard = hand.getCard( cardCt - 1 );  // Card just dealt.
             Card prevCard = hand.getCard( cardCt - 2 );  // The previous card.
             if ( thisCard.getValue() < prevCard.getValue() ) {
                gameInProgress = false;
                message = "Too bad! You lose.";
             else if ( thisCard.getValue() == prevCard.getValue() ) {
                gameInProgress = false;
                message = "Too bad!  You lose"; // on ties
             else if ( cardCt == 4) {    //CHANGED+++++++++++++++++=
                gameInProgress = false;
               message = "You win! Hurra! ";
             else {
                message = "Got it right!  Try for " + cardCt + " Press  -Deal- ";
             repaint();
          } // end
          void doNewGame() {
                 // Called by the constructor, and called by actionPerformed() if
                 // the use clicks the "New Game" button.  Start a new game.
             if (gameInProgress) {
                     // If the current game is not over, it is an error to try
                     // to start a new game.
                message = "You still have to finish this game! Press   -Deal-";
                repaint();
                return;
             deck = new Deck();   // Create the deck and hand to use for this game.
             hand = new Hand();
             deck.shuffle();
             hand.addCard( deck.dealCard() );  // Deal the first card into the hand.
             message = "Deal your cards";
             gameInProgress = true;
             repaint();
          } // end doNewGame()
          public void paintComponent(Graphics g) {
                // This method draws the message at the bottom of the
                // canvas, and it draws all of the dealt cards spread out
                // across the canvas.  If the game is in progress, an
                // extra card is dealt representing the card to be dealt next.
             super.paintComponent(g);
                  g.setFont(bigFont);
                  g.drawString(message,10,135);
                  g.setFont(smallFont);
             int cardCt = hand.getCardCount();
                  for (int i = 0; i < cardCt; i++)
                        drawCard(g, hand.getCard(i), 10 + i * 90, 10);
             if (gameInProgress)
                drawCard(g, null, 10 + cardCt * 90, 10);
          } // end paintComponent()
          void drawCard(Graphics g, Card card, int x, int y) {
                  // Draws a card as a 80 by 100 rectangle with
                  // upper left corner at (x,y).  The card is drawn
                  // in the graphics context g.  If card is null, then
                  // a face-down card is drawn.  (The cards are
                  // rather primitive.)
             if (card == null) {      // Draw a face-down card
                g.setColor(Color.blue);
                g.fillRect(x,y,80,100);
                g.setColor(Color.white);
                g.drawRect(x+3,y+3,73,93);
                g.drawRect(x+4,y+4,71,91);
             else {
                g.setColor(Color.white);
                g.fillRect(x,y,80,100);
                g.setColor(Color.gray);
                g.drawRect(x,y,79,99);
                g.drawRect(x+1,y+1,77,97);
             if (card.getSuit() == Card.DIAMONDS || card.getSuit() == Card.HEARTS)
                g.setColor(Color.red);
             else
                g.setColor(Color.black);
                g.drawString(card.getValueAsString(), x + 10, y + 30);
                g.drawString("of", x+ 10, y + 50);
                g.drawString(card.getSuitAsString(), x + 10, y + 70);
          } // end drawCard()
       } // end nested class HighLowCanvas
    } // end class HighLowGUI
       An object of class card represents one of the 52 cards in a
       standard deck of playing cards.  Each card has a suit and
       a value.
    public class Card {
        public final static int SPADES = 0,       // Codes for the 4 suits.
                                HEARTS = 1,
                                DIAMONDS = 2,
                                CLUBS = 3;
        public final static int ACE = 1,          // Codes for the non-numeric cards.
                                JACK = 11,        //   Cards 2 through 10 have their
                                QUEEN = 12,       //   numerical values for their codes.
                                KING = 13;
        private final int suit;   // The suit of this card, one of the constants
                                  //    SPADES, HEARTS, DIAMONDS, CLUBS.
        private final int value;  // The value of this card, from 1 to 11.
        public Card(int theValue, int theSuit) {
                // Construct a card with the specified value and suit.
                // Value must be between 1 and 13.  Suit must be between
                // 0 and 3.  If the parameters are outside these ranges,
                // the constructed card object will be invalid.
            value = theValue;
            suit = theSuit;
        public int getSuit() {
                // Return the int that codes for this card's suit.
            return suit;
        public int getValue() {
                // Return the int that codes for this card's value.
            return value;
        public String getSuitAsString() {
                // Return a String representing the card's suit.
                // (If the card's suit is invalid, "??" is returned.)
            switch ( suit ) {
               case SPADES:   return "Spades";
               case HEARTS:   return "Hearts";
               case DIAMONDS: return "Diamonds";
               case CLUBS:    return "Clubs";
               default:       return "??";
        public String getValueAsString() {
                // Return a String representing the card's value.
                // If the card's value is invalid, "??" is returned.
            switch ( value ) {
               case 1:   return "A";
               case 2:   return "2";
               case 3:   return "3";
               case 4:   return "4";
               case 5:   return "5";
               case 6:   return "6";
               case 7:   return "7";
               case 8:   return "8";
               case 9:   return "9";
               case 10:  return "10";
               case 11:  return "J";
               case 12:  return "Q";
               case 13:  return "K";
               default:  return "??";
        public String toString() {
               // Return a String representation of this card, such as
               // "10 of Hearts" or "Queen of Spades".
            //return ""+"
            return getValueAsString() + " of " + getSuitAsString();
    } // end class Card
        An object of type Deck represents an ordinary deck of 52 playing cards.
        The deck can be shuffled, and cards can be dealt from the deck.
    public class Deck {
        private Card[] deck;   // An array of 52 Cards, representing the deck.
        private int cardsUsed; // How many cards have been dealt from the deck.
        public Deck() {       // Create an unshuffled deck of cards.
           deck = new Card[52];
           int cardCt = 0;    // How many cards have been created so far.
           for ( int suit = 0; suit <= 3; suit++ ) {
              for ( int value = 1; value <= 13; value++ ) {
                 deck[cardCt] = new Card(value,suit);
                 cardCt++;
           cardsUsed = 0;
        public void shuffle() {
              // Put all the used cards back into the deck, and shuffle it into
              // a random order.
            for ( int i = 51; i > 0; i-- ) {
                int rand = (int)(Math.random()*(i+1));
                Card temp = deck;
    deck[i] = deck[rand];
    deck[rand] = temp;
    cardsUsed = 0;
    public int cardsLeft() {
    // As cards are dealt from the deck, the number of cards left
    // decreases. This function returns the number of cards that
    // are still left in the deck.
    return 52 - cardsUsed;
    public Card dealCard() {
    // Deals one card from the deck and returns it.
    if (cardsUsed == 52)
    shuffle();
    cardsUsed++;
    return deck[cardsUsed - 1];
    } // end class Deck
    An object of type Hand represents a hand of cards. The maximum number of
    cards in the hand can be specified in the constructor, but by default
    is 5. A utility function is provided for computing the value of the
    hand in the game of Blackjack.
    import java.util.Vector;
    public class Hand {
    private Vector hand; // The cards in the hand.
    public Hand() {
    // Create a Hand object that is initially empty.
    hand = new Vector();
    public void clear() {
    // Discard all the cards from the hand.
    hand.removeAllElements();
    public void addCard(Card c) {
    // Add the card c to the hand. c should be non-null. (If c is
    // null, nothing is added to the hand.)
    if (c != null)
    hand.addElement(c);
    public void removeCard(Card c) {
    // If the specified card is in the hand, it is removed.
    hand.removeElement(c);
    public void removeCard(int position) {
    // If the specified position is a valid position in the hand,
    // then the card in that position is removed.
    if (position >= 0 && position < hand.size())
    hand.removeElementAt(position);
    public int getCardCount() {
    // Return the number of cards in the hand.
    return hand.size();
    public Card getCard(int position) {
    // Get the card from the hand in given position, where positions
    // are numbered starting from 0. If the specified position is
    // not the position number of a card in the hand, then null
    // is returned.
    if (position >= 0 && position < hand.size())
    return (Card)hand.elementAt(position);
    else
    return null;
    public void sortBySuit() {
    // Sorts the cards in the hand so that cards of the same suit are
    // grouped together, and within a suit the cards are sorted by value.
    // Note that aces are considered to have the lowest value, 1.
    Vector newHand = new Vector();
    while (hand.size() > 0) {
    int pos = 0; // Position of minimal card.
    Card c = (Card)hand.elementAt(0); // Minumal card.
    for (int i = 1; i < hand.size(); i++) {
    Card c1 = (Card)hand.elementAt(i);
    if ( c1.getSuit() < c.getSuit() ||
    (c1.getSuit() == c.getSuit() && c1.getValue() < c.getValue()) ) {
    pos = i;
    c = c1;
    hand.removeElementAt(pos);
    newHand.addElement(c);
    hand = newHand;
    public void sortByValue() {
    // Sorts the cards in the hand so that cards of the same value are
    // grouped together. Cards with the same value are sorted by suit.
    // Note that aces are considered to have the lowest value, 1.
    Vector newHand = new Vector();
    while (hand.size() > 0) {
    int pos = 0; // Position of minimal card.
    Card c = (Card)hand.elementAt(0); // Minumal card.
    for (int i = 1; i < hand.size(); i++) {
    Card c1 = (Card)hand.elementAt(i);
    if ( c1.getValue() < c.getValue() ||
    (c1.getValue() == c.getValue() && c1.getSuit() < c.getSuit()) ) {
    pos = i;
    c = c1;
    hand.removeElementAt(pos);
    newHand.addElement(c);
    hand = newHand;

    Please don't crosspost. It cuts down on the effectiveness of responses, leads to people wasting their time answering what others have already answered, makes for difficult discussion, and is generally just annoying and bad form.

Maybe you are looking for