Help, experiencing minor bugs in program

this is supposed to use rectangles and you should be able to load and save and they have colors and do a few more things with them, the loading is where it doesn't work.
*-------------------------------------------------------------- 80 columns ---|
* This is the main class for the application. It is built along the same
* lines as the Editor class of project 1. It has a constructor, two instance
* methods, and a static main()  that kicks the whole thing off.
* The two instance methods are a menu creation method, and a menuItems
* initialisation method.  The constructor instantiates the window
* and sets up its internals by creating and installing the drawing canvas,
* toolbar, and menus. All of the code works correctly as is and should
* require no changes.
* @version      1.1 15/04/01
* @author       Julie Zelenski
* @author       Restructured by Ian A. Mason
* @see       javax.swing.JFrame
* @see       javax.swing.JMenuBar
* @see       javax.swing.JMenuItem
* @see       javax.swing.JMenu
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class JavaDraw extends JFrame {
    final Toolbar toolbar = new Toolbar();
    final DrawingCanvas canvas = new DrawingCanvas(toolbar, 350, 350);
    final int menuMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask();
    final JMenuBar mb = new JMenuBar();
    final String[]
         fileMenuItems = {"Clear all", "Load file", "Save to file", "Quit"};
    final int[] fileKeyCodes = {KeyEvent.VK_N, KeyEvent.VK_O, KeyEvent.VK_S, KeyEvent.VK_Q};
    final ActionListener[] fileActionListeners = {
     new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              canvas.clearAll();}},
     new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              canvas.loadFile();}},
     new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              canvas.saveToFile();}},
     new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              System.exit(0);}}
    final String[] editMenuItems = {"Cut", "Copy", "Paste", "Delete"};
    final int[] editKeyCodes = {KeyEvent.VK_X, KeyEvent.VK_C, KeyEvent.VK_V, KeyEvent.VK_BACK_SPACE};
    final int[] editMenuMasks = {menuMask, menuMask, menuMask, 0};
    final ActionListener[] editActionListeners = {
     new ActionListener() {
          public void actionPerformed(ActionEvent e) { canvas.cut();}},
     new ActionListener() {
          public void actionPerformed(ActionEvent e) { canvas.copy();}},
     new ActionListener() {
          public void actionPerformed(ActionEvent e) { canvas.paste();}},
     new ActionListener() {
          public void actionPerformed(ActionEvent e) { canvas.delete();}}
    final String[] layeringMenuItems = {"Bring to front", "Send to back"};
    final int[]    layeringKeyCodes = {KeyEvent.VK_F, KeyEvent.VK_B};
    final ActionListener[] layeringActionListeners = {
     new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              canvas.bringToFront();}},
     new ActionListener() {
          public void actionPerformed(ActionEvent e) {
              canvas.sendToBack();}}
    private JavaDraw(){
     super("JavaDraw!");
     toolbar.setCanvas(canvas);
     getContentPane().add(toolbar, BorderLayout.SOUTH);
     getContentPane().add(canvas, BorderLayout.CENTER);
     createMenus();
     setJMenuBar(mb);
     setLocation(100, 20);
     pack();
     setVisible(true);
    static public void main(String[] args){
     JavaDraw javaDraw = new JavaDraw();
    private void initMenus(JMenu m,
                  String  miLabel,
                  int keyCode,
                  int menuMask,
                  ActionListener al){
     JMenuItem mi = new JMenuItem(miLabel);
     m.add(mi);
     mi.addActionListener(al);
     mi.setAccelerator(KeyStroke.getKeyStroke(keyCode, menuMask));
    private void createMenus(){
     JMenu m;
     m = new JMenu("File");
     for(int i = 0; i < fileMenuItems.length; i++)
         initMenus(m,
                fileMenuItems,
          fileKeyCodes[i],
          menuMask,
          fileActionListeners[i]);
     mb.add(m);
     m = new JMenu("Edit");
     for(int i = 0; i < editMenuItems.length; i++)
     initMenus(m,
          editMenuItems[i],
          editKeyCodes[i],
          editMenuMasks[i],
          editActionListeners[i]);
     mb.add(m);
     m = new JMenu("Layering");
     for(int i = 0; i < layeringMenuItems.length; i++)
     initMenus(m,
          layeringMenuItems[i],
          layeringKeyCodes[i],
          menuMask,
          layeringActionListeners[i]);
     mb.add(m);
*-------------------------------------------------------------- 80 columns ---|
* The DrawingCanvas class a small extension of JComponent
* @version 1.1 15/04/01
* @author Julie Zelenski
* @author (touched up by Ian A. Mason)
* @see javax.swing.JComponent
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;
public class DrawingCanvas extends JComponent{
static final int DRAG_NONE = 0;
static final int DRAG_CREATE = 1;
static final int DRAG_RESIZE = 2;
static final int DRAG_MOVE = 3;
// list of all shapes on canvas
protected Vector allShapes;          
// currently selected shape (can be null at times)
protected Rect selectedShape;
// reference to toolbar to message for tool&color settings
protected Toolbar toolbar;
protected Rect clipboard=null;          
/* These are the unimplemented menu commands. The menus are already
* set up to send the correct messages to the canvas, but the
* method bodies themselves are currently completely empty. It will
* be your job to fill them in!
public void cut() {
     copy();
     delete();
public void copy() {
     int x=(int)selectedShape.getBounds().getX();
     int y=(int)selectedShape.getBounds().getY();
     Point p=new Point(x,y);
     clipboard=new Rect(p,this);
     clipboard.setBounds(selectedShape.getBounds());
public void paste() {
     if(clipboard==null)
          return;
     allShapes.add(clipboard);
     setSelectedShape(clipboard);
     copy();
     this.repaint();
public void delete() {
     if(selectedShape==null)
          return;
     else{
     int num=allShapes.indexOf(selectedShape);
     allShapes.remove(num);
     selectedShape=null;
     this.repaint();
public void clearAll() {
     allShapes.removeAllElements();
     this.repaint();
public void loadFile() {
     Load load=new Load(this);
     load.setSize(250,200);
     load.validate();
     load.setVisible(true);
public void done(Vector vect){
     allShapes.removeAllElements();
     for(int i=0;i<vect.size();i++){
          allShapes.add(vect.elementAt(i));
     this.repaint();
public void saveToFile() {
     Save save=new Save(allShapes);
     save.setSize(250,200);
     save.validate();
     save.setVisible(true);
public void bringToFront() {
     if(selectedShape==null)
          return;
     int size=allShapes.size();
     int index=allShapes.indexOf(selectedShape);
     for(int i=index+1;i<=size-1;i++){
          allShapes.set(i-1,allShapes.elementAt(i));
     allShapes.set(size-1,selectedShape);
     this.repaint();
public void sendToBack() {
     if(selectedShape==null)
          return;
     int index=allShapes.indexOf(selectedShape);
     for(int i=index-1;i>=0;i--){
          allShapes.remove(allShapes.elementAt(i+1));
          allShapes.add(i+1,allShapes.elementAt(i));
     allShapes.remove(allShapes.elementAt(0));
     allShapes.add(0,selectedShape);
     this.repaint();
* Constructor for creating a new empty DrawingCanvas. We set up
* our size and background colors, instantiate an empty vector of shapes,
* and install a listener for mouse events using our inner class
* CanvasMouseHandler
public DrawingCanvas(Toolbar tb, int width, int height){
     setPreferredSize(new Dimension(width, height));
     setBackground(Color.white);
     toolbar = tb;
     allShapes = new Vector();
     selectedShape = null;
     CanvasMouseHandler handler = new CanvasMouseHandler();
     addMouseListener(handler);
     addMouseMotionListener(handler);
* All components are responsible for drawing themselves in
* response to repaint() requests. The standard method a component
* overrides is paint(Graphics g), but for Swing components, the default
* paint() handler calls paintBorder(), paintComponent() and paintChildren()
* For a Swing component, you override paintComponent and do your
* drawing in that method. For the drawing canvas, we want to
* clear the background, then iterate through our shapes asking each
* to draw. The Graphics object is clipped to the region to update
* and we use to that avoid needlessly redrawing shapes outside the
* update region.
public void paintComponent(Graphics g){
     Rectangle regionToRedraw = g.getClipBounds();
     g.setColor(getBackground());
     g.fillRect(regionToRedraw.x, regionToRedraw.y,
          regionToRedraw.width, regionToRedraw.height);
     Iterator iter = allShapes.iterator();
     while (iter.hasNext())
     ((Rect)iter.next()).draw(g, regionToRedraw);
* Changes the currently selected shape. There is at most
* one shape selected at a time on the canvas. It is possible
* for the selected shape to be null. Messages the shape to
* change its selected state which will in turn refresh the
* shape with the knobs active.
protected void setSelectedShape(Rect shapeToSelect) {
     // if change in selection
     if (selectedShape != shapeToSelect) {
     // deselect previous selection
     if (selectedShape != null)
          selectedShape.setSelected(false);
     // set selection to new shape
     selectedShape = shapeToSelect;
     if (selectedShape != null) {
          shapeToSelect.setSelected(true);
* A hit-test routine which finds the topmost shape underneath a
* given point.We search Vector of shapes in back-to-front order
* since shapes created later are added to end and drawn last, thus
* appearing to be "on top" of the earlier ones. When a click comes
* in, we want to select the top-most shape.
protected Rect shapeContainingPoint(Point pt){
     for (int i = allShapes.size()-1; i >= 0; i--) {
     Rect r = (Rect)allShapes.elementAt(i);
     if (r.inside(pt)) return r;
     return null;
* The inner class CanvasMouseHandler is the object that handles the
* mouse actions (press, drag, release) over the canvas. Since there is
* a bit of state to drag during the various operations (which shape,
* where we started from, etc.) it is convenient to encapsulate all that
* state with this little convenience object and register it as the
* handler for mouse events on the canvas.
protected class CanvasMouseHandler
     extends MouseAdapter implements MouseMotionListener {
     Point dragAnchor;          
     // variables using to track state during drag operations
     int dragStatus;
     /** When the mouse is pressed we need to figure out what
     * action to take. If the tool mode is arrow, the click might
     * be a select, move or reisze. If the tool mode is one of the
     * shapes, the click initiates creation of a new shape.
     public void mousePressed(MouseEvent event){
     Rect clicked = null;
     Point curPt = event.getPoint();
     // first, determine if click was on resize knob of selected shape
     if (toolbar.getCurrentTool() == Toolbar.SELECT) {
          if (selectedShape != null &&
          (dragAnchor = selectedShape.getAnchorForResize(curPt))
          != null) {
          // drag will resize this shape
          dragStatus = DRAG_RESIZE;     
          } else if ((clicked = shapeContainingPoint(curPt)) != null) {
          // if not, check if any shape was clicked
          setSelectedShape(clicked);
          // drag will move this shape      
          dragStatus = DRAG_MOVE;
          dragAnchor = curPt;
          } else {     
          // else this was a click in empty area,
          // deselect selected shape,
          setSelectedShape(null);
          // drag does nothing in this case
          dragStatus = DRAG_NONE;
     } else {
          Rect newShape = new Rect(curPt, DrawingCanvas.this);
          // create rect here
          allShapes.add(newShape);
          setSelectedShape(newShape);
          dragStatus = DRAG_CREATE;          
          // drag will create (resize) this shape
          dragAnchor = curPt;
     /** As the mouse is dragged, our listener will receive periodic
     * updates as mouseDragged events. When we get an update position,
     * we update the move/resize event that is in progress.
     public void mouseDragged(MouseEvent event){
     Point curPt = event.getPoint();
     switch (dragStatus) {
     case DRAG_MOVE:
          selectedShape.translate(curPt.x - dragAnchor.x,
                         curPt.y - dragAnchor.y);
          // update for next dragged event
          dragAnchor = curPt;
          break;
     case DRAG_CREATE: case DRAG_RESIZE:
          selectedShape.resize(dragAnchor, curPt);
          break;
     public void mouseMoved(MouseEvent e) {}
/** A little helper routine that will be useful for the load & save
* operations. It brings up the standard JFileChooser dialog and
* allows the user to specify a file to open or save. The return
* value is the full path to the chosen file or null if no file was
* selected.
protected String filenameChosenByUser(boolean forOpen){
     JFileChooser fc = new JFileChooser(System.getProperty("user.dir") +
                         java.io.File.separator + "Documents");
     int result = (forOpen? (fc.showOpenDialog(this)) :
          fc.showSaveDialog(this));
     java.io.File chosenFile = fc.getSelectedFile();
     if (result == JFileChooser.APPROVE_OPTION && chosenFile != null)
     return chosenFile.getPath();
     return null;
     // return null if no file chosen or dialog cancelled
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.io.*;
class Load extends JFrame implements ActionListener, Serializable{
     Container contentPane;
     JTextField jtf;
     JButton jb;
     Object obj=null;
     Load load;
     Thread thread;
     DrawingCanvas draw;
     public Load(DrawingCanvas dc){
          draw=dc;
          contentPane=getContentPane();
          contentPane.setLayout(new FlowLayout());
          jtf=new JTextField(20);
          jb=new JButton("Load");
          jb.addActionListener(this);
          contentPane.add(jtf);
          contentPane.add(jb);
     public void actionPerformed(ActionEvent e){
          String text=jtf.getText();
          SimpleObjectReader reader=SimpleObjectReader.openFileForReading(text+".shp");
          if(reader==null){
               System.out.println("Couldn't open file!");
               return;
          obj=reader.readObject();
          reader.close();
          draw.done((Vector)obj);
          this.setVisible(false);
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.util.Vector;
import java.io.*;
class Save extends JFrame implements ActionListener, Serializable{
     Container contentPane;
     JTextField jtf;
     Vector shapes;
     JButton jb;
     public Save(Vector shapeVector){
          shapes=shapeVector;
          contentPane=getContentPane();
          contentPane.setLayout(new FlowLayout());
          jtf=new JTextField(20);
          jb=new JButton("Save");
          jb.addActionListener(this);
          contentPane.add(jtf);
          contentPane.add(jb);
     public void actionPerformed(ActionEvent e){
          String text=jtf.getText();
          SimpleObjectWriter writer=SimpleObjectWriter.openFileForWriting(text+".shp");
          if(writer==null){
               System.out.println("Couldn't open file!");
               return;
          writer.writeObject(shapes);
          writer.close();
          this.setVisible(false);
*-------------------------------------------------------------- 80 columns ---|
* The RectShape class defines a simple rectangular shape object.
* It tracks its bounding box, selected state, and the canvas it is being
* drawn in. It has some basic methods to select, move, and resize the
* rectangle. It has methods that draw the shape in the selected or unselected
* states and updates the canvas whenever the state or bounds of the rectangle
* change. The code that is there works properly, but you will need to extend
* and change the code to support additional features.
* @version 1.1 15/04/01
* @author Julie Zelenski
* @author (touched up by Ian A. Mason)
import java.awt.*;
import java.io.*;
public class Rect implements Serializable{     
protected Rectangle bounds;
protected boolean isSelected;
public Color color;
public DrawingCanvas canvas;
protected static final int KNOB_SIZE = 6;
protected static final int NONE = -1;
protected static final int NW = 0;
protected static final int SW = 1;
protected static final int SE = 2;
protected static final int NE = 3;
/** The constructor that creates a new zero width and height rectangle
* at the given position in the canvas.
public Rect(Point start, DrawingCanvas dcanvas){
     canvas = dcanvas;
     bounds = new Rectangle(start);
     color=canvas.toolbar.getCurrentColor();
/** The "primitive" for all resizing/moving/creating operations that
* affect the rect bounding box. The current implementation just resets
* the bounds variable and triggers a re-draw of the union of the old &
* new rectangles. This will redraw the shape in new size and place and
* also "erase" if bounds are now smaller than before. It is a good
* design to have all changes to a critical variable bottleneck through
* one method so that you can be sure that all the updating that goes
* with it only needs to be implemented in this one place. If any of your
* subclasses have additional work to do when the bounds change, this is
* the method to override. Make sure that any methods that change the
* bounds call this method instead of directly manipulating the variable.
protected void setBounds(Rectangle newBounds){
     Rectangle oldBounds = bounds;
     bounds = newBounds;
     updateCanvas(oldBounds.union(bounds));
/** The resize operation is called when first creating a rect, as well as
* when later resizing by dragging one of its knobs. The two parameters
* are the points that define the new bounding box. The anchor point
* is the location of the mouse-down event during a creation operation
* or the opposite corner of the knob being dragged during a resize
* operation. The end is the current location of the mouse. If you
* create the smallest rectangle which encloses these two points, you
* will have the new bounding box. Use the setBounds() primitive which
* is the bottleneck we are using for all geometry changes, it handles
* updating and redrawing.
public void resize(Point anchor, Point end){
     Rectangle newRect = new Rectangle(anchor);
     // creates smallest rectange which
     // includes both anchor & end
     newRect.add(end);
     // reset bounds & redraw affected areas
     setBounds(newRect);      
public Rectangle getBounds(){
     return bounds;
/** The translate operation is called when moving a shape by dragging in
* the canvas. The two parameters are the delta-x and delta-y to move
* by. Note that either or both can be negative. Create a new rectangle
* from our bounds and translate and then go through the setBounds()
* primitive to change it.
public void translate(int dx, int dy){
     Rectangle newRect = new Rectangle(bounds);
     newRect.translate(dx, dy);
     setBounds(newRect);
/** Used to change the selected state of the shape which will require
* updating the affected area of the canvas to add/remove knobs.
public void setSelected(boolean newState){
     isSelected = newState;
     // need to erase/add knobs
     // including extent of extended bounds
     updateCanvas(bounds, true);
/** The updateCanvas() methods are used when the state has changed
* in such a way that it needs to be refreshed in the canvas to properly
* reflect the new settings. The shape should take responsibility for
* messaging the canvas to properly update itself. The appropriate AWT/JFC
* way to re-draw a component is to send it the repaint() method with the
* rectangle that needs refreshing. This will cause an update() event to
* be sent to the component which in turn will call paint(), where the
* real drawing implementation goes. See the paint() method in
* DrawingCanvas to see how it is implemented.
protected void updateCanvas(Rectangle areaOfChange, boolean enlargeForKnobs){
     Rectangle toRedraw = new Rectangle(areaOfChange);
     if (enlargeForKnobs)
     toRedraw.grow(KNOB_SIZE/2, KNOB_SIZE/2);
     canvas.repaint(toRedraw);
protected void updateCanvas(Rectangle areaOfChange){
     updateCanvas(areaOfChange, isSelected);
/** When the DrawingCanvas needs a shape to draw itself, it sends a draw
* message, passing the graphics context and the current region being
* redrawn. If the shape intersects with that region, it must draw itself
* doing whatever it takes to properly represent itself in the canvas
* (colors, location, size, knobs, etc.) by messaging the Graphics object.
public void draw(Graphics g, Rectangle regionToDraw){
     if (!bounds.intersects(regionToDraw))
     return;
     g.setColor(color);
     g.fillRect(bounds.x, bounds.y, bounds.width, bounds.height);
     if (isSelected) { // if selected, draw the resizing knobs
     // along the 4 corners
     Rectangle[] knobs = getKnobRects();
     for (int i = 0; i < knobs.length; i++)
          g.fillRect(knobs[i].x, knobs[i].y,
               knobs[i].width, knobs[i].height);
/** When the DrawingCanvas needs to determine which shape is under
* the mouse, it asks the shape to determine if a point is "inside".
* This method should returns true if the given point is inside the
* region for this shape. For a rectangle, any point within the
* bounding box is inside the shape.
public boolean inside(Point pt){
     return bounds.contains(pt);
/** When needed, we create the array of knob rectangles on demand. This
* does mean we create and discard the array and rectangles repeatedly.
* These are small objects, so perhaps it is not a big deal, but
* a valid alternative would be to store the array of knobs as an
* instance variable of the Shape and and update the knobs as the bounds
* change. This means a little more memory overhead for each Shape
* (since it is always storing the knobs, even when not being used) and
* having that redundant data opens up the possibility of bugs from
* getting out of synch (bounds move but knobs didn't, etc.) but you may
* find that a more appealing way to go. Either way is fine with us.
* Note this method provides a nice unified place for one override from
* a shape subclass to substitute fewer or different knobs.
protected Rectangle[] getKnobRects(){
     Rectangle[] knobs = new Rectangle[4];
     knobs[NW] = new Rectangle(bounds.x - KNOB_SIZE/2,
                    bounds.y - KNOB_SIZE/2, KNOB_SIZE, KNOB_SIZE);
     knobs[SW] = new Rectangle(bounds.x - KNOB_SIZE/2,
                    bounds.y + bounds.height - KNOB_SIZE/2,
                    KNOB_SIZE, KNOB_SIZE);
     knobs[SE] = new Rectangle(bounds.x + bounds.width - KNOB_SIZE/2,
                    bounds.y + bounds.height - KNOB_SIZE/2,
                    KNOB_SIZE, KNOB_SIZE);
     knobs[NE] = new Rectangle(bounds.x + bounds.width - KNOB_SIZE/2,
                    bounds.y - KNOB_SIZE/2,
                    KNOB_SIZE, KNOB_SIZE);
     return knobs;
/** Helper method to determine if a point is within one of the resize
* corner knobs. If not selected, we have no resize knobs, so it can't
* have been a click on one. Otherwise, we calculate the knob rects and
* then check whether the point falls in one of them. The return value
* is one of NW, NE, SW, SE constants depending on which knob is found,
* or NONE if the click doesn't fall within any knob.
protected int getKnobContainingPoint(Point pt){
     // if we aren't selected, the knobs
     // aren't showing and thus there are no knobs to check
     if (!isSelected) return NONE;
     Rectangle[] knobs = getKnobRects();
     for (int i = 0; i < knobs.length; i++)
     if (knobs[i].contains(pt))
          return i;
     return NONE;
/** Method used by DrawingCanvas to determine if a mouse click is starting
* a resize event. In order for it to be a resize, the click must have
* been within one of the knob rects (checked by the helper method
* getKnobContainingPoint) and if so, we return the "anchor" ie the knob
* opposite this corner that will remain fixed as the user drags the
* resizing knob of the other corner around. During the drag actions of a
* resize, that fixed anchor point and the current mouse point will be
* passed to the resize method, which will reset the bounds in response
* to the movement. If the mouseLocation wasn't a click in a knob and
* thus not the beginning of a resize event, null is returned.
public Point getAnchorForResize(Point mouseLocation){
     int whichKnob = getKnobContainingPoint(mouseLocation);
     // no resize knob is at this location
     if (whichKnob == NONE)
     return null;
     switch (whichKnob) {
     case NW: return new Point(bounds.x + bounds.width,
                    bounds.y + bounds.height);
     case NE: return new Point(bounds.x, bounds.y + bounds.height);
     case SW: return new Point(bounds.x + bounds.width, bounds.y);
     case SE: return new Point(bounds.x, bounds.y);
     return null;
import java.io.*;
* SimpleObjectReader is a small class to wrap around the usual ObjectStream
* to shield you from the exception handling which we haven't yet gotten
* to in class.
* <P>It has just three methods of note: one to open a new file for reading,
* one to read an object from an open file, and one to close the file when done.
* <P>Any object that you attempt to read must properly implement the Serializable
* interface. Here is a simple example that shows using the SimpleFileReader to
* to rehydrate objects from a file and print them:
* <PRE>
* SimpleObjectReader reader = SimpleObjectReader.openFileForReading("shapes");
* if (reader == null) {
* System.out.println("Couldn't open file!");
* return;
* Object obj;
* while ((obj = reader.readObject()) != null)
* System.out.println(obj);
* reader.close();
* </PRE>
* <P>You are free to edit or extend this class, but we don't expect that
* you should need to make any changes.
* @version 1.1 15/04/01
* @author Julie Zelenski
* @author (touched up by Ian A. Mason)
public class SimpleObjectReader {
private ObjectInputStream ois;
* Opens a new file for reading. The filename can either be a relative
* path, which will be relative to the working directory of the program
* when started, or an absolute path. If the file exists and can be
* opened, a new SimpleObjectReader is returned. If the file cannot be
* opened (for any reason: wrong name, wrong path, lack of permissions, etc.)
* null is returned.
public static SimpleObjectReader openFileForReading(String filename){
     try {
     return new SimpleObjectReader(new ObjectInputStream(new FileInputStream(filename)));
     } catch(IOException e) {     
     return null;
* Reads a single object from the file and returns it. If there are
* no more objects in the file (i.e, we have reached the end of file),
* null is returned null is returned. null is also
* returned on any I/O error.
public Object readObject (){
     try {
     return ois.readObject();
     } catch (IOException e) {
     e.printStackTrace();
     return null;
     } catch (ClassNotFoundException e) {
     e.printStackTrace();
     return null;
* Closes the file when done reading. You should close a reader when
* you are finished to release the OS resources for use by others.
public void close (){
     try {
     ois.close();
     catch (IOException e) {}
* Constructor is private so that only means to create a new reader
* is through the static method which does error checking.
private SimpleObjectReader(ObjectInputStream ois){
     this.ois = ois;
import java.io.*;
* SimpleObjectWriter is a small class to wrap around the usual
* ObjectOutputStream to shield you from the exception handling
* which we haven't yet gotten to in class.
* <P>It has just three methods of note: one to open a new file for writing,
* one to write an object to the file, and one to close the
* the file when done.
* <P>Here is a simple example that shows using the SimpleObjectWriter
* to create a new file and write some objects into it:
* <PRE>
* SimpleObjectWriter writer =
* SimpleObjectWriter.openFileForWriting("objects");
* if (writer == null) {
* System.out.println("Couldn't open file!");
* return;
* writer.writeObject("Here is a string");
* writer.writeObject("And another one.");
* writer.writeObject(new Date());
* writer.close();
* </PRE>
* <P>You are free to edit or extend this class, but we don't expect that
* you should need to make any changes.
* @version 1.1 15/04/01
* @author Julie Zelenski
* @author (touched up by Ian A. Mason)
public class SimpleObjectWriter {
private ObjectOutputStream oos;
* Opens a new file for writing. The filename can either be a relative
* path, which will be relative to the working directory of the program
* when started, or an absolute path. If the file can be created, a
* new SimpleObjectWriter is returned. If the file already exists, this
* will overwrite its content

I'm not reading that either, but to help you for next time:
- use more than 1 sentence to describe your problem
- only post the RELEVANT code, or a small test program with the same problem if possible.
At least you formatted it, I'll give you that.
Cheers,
Radish21
PS. I think in this case, posting another (better worded) thread might be a good idea, because no one is going to read this one. In general though, don't :)

Similar Messages

  • Is anyone experiencing a bug in mail app in iOS 7 ?

    I'm experiencing a bug in mail app in iPhone as well as in my iPad... This bug makes all my mails unread whenever I refresh for mails and whenever I read a new mail it stays unread even if a close the app. Please help me if possible...

    I've not heard of or experience any such issue.
    Have you tried removing and readding the accounts in question?

  • Minor bug in BindingContext

    To whom it may concern,
    I found the following minor bug in the BindingContext class: keysIterator() behaves like veluesIterator().
    I don't think this affects the framework right now, but here I post it.
    Product: JDeveloper 9.0.5.1 (Build 1605)
    Class: oracle.adf.model.BindingContext.java
    Code affected:
    * Returns a thread safe values iterator.
    public Iterator valuesIterator()
    HashMap copy = (HashMap)mContextMap.clone();
    return copy.values().iterator();
    * Returns a thread safe keys iterator.
    public Iterator keysIterator()
    HashMap copy = (HashMap)mContextMap.clone();
    return copy.values().iterator(); /* <-- This should be "copy.keySet().iterator();" instead. */
    Hope it helps,
    Lluís.

    Thanks for pointing this out. This will be fixed in the next release.
    JR

  • TS3297 when i try to open itunes store error comes up saying windows experienced a problem and program stopped working

    can some help me everytime I try to open itunes store an error comes up saying windows experienced a problem and program stopped working. Itunes opens this just happens when I go to the store

    Hello Ducati848,
    Thanks for using Apple Support Communities.
    For more information on this, take a look at:
    iTunes for Windows Vista or Windows 7: Troubleshooting unexpected quits, freezes, or launch issues
    http://support.apple.com/kb/ts1717
    Best of luck,
    Mario

  • Calling search helps dynamically in module pool program

    Hi Experts,
    I have created two search helps. I need to call these search helps in my module pool program dynamically for a single field (i.e ZMATNR).
    you might be known... if it is a single search help, we can assign that in field attributes.
    But here... I need to call different search helps for a single field based on the condition.
    Pls help me.
    Thanks
    Raghu

    Hi,
    Use the below function module and  pass the search help created in search help field according to the condition.
    Process on Value-request.
    if condition = A.
    call function " F4IF_FIELD_VALUE_REQUEST"
    TABNAME           =                                                         
    FIELDNAME        =                                                       
    SEARCHHELP     =  "Mention search help created                                                          
    Elseif  Conditon =B.
    call function " F4IF_FIELD_VALUE_REQUEST"
    TABNAME           =                                                         
    FIELDNAME        =                                                       
    SEARCHHELP     =  "Mention search help created      
    Endif.
    Regards,
    Prabhudas

  • Need help in my assignment, Java programing?

    Need help in my assignment, Java programing?
    It is said that there is only one natural number n such that n-1 is a square and
    n + 1 is a cube, that is, n - 1 = x2 and n + 1 = y3 for some natural numbers x and y. Please implement a program in Java.
    plz help!!
    and this is my code
    but I don't no how to finsh it with the right condition!
    plz heelp!!
    and I don't know if it right or wrong!
    PLZ help me!!
    import javax.swing.JOptionPane;
    public class eiman {
    public static void main( String [] args){
    String a,b;
    double n,x,y,z;
    boolean q= true;
    boolean w= false;
    a=JOptionPane.showInputDialog("Please enter a number for n");
    n=Double.parseDouble(a);
    System.out.println(n);
    x=Math.sqrt(n-1);
    y=Math.cbrt(n+1);
    }

    OK I'll bite.
    I assume that this is some kind of assignment.
    What is the program supposed to do?
    1. Figure out the value of N
    2. Given an N determine if it is the correct value
    I would expect #1, but then again this seem to be a strange programming assignment to me.
    // additions followI see by the simulpostings that it is indeed #1.
    So I will give the tried and true advice at the risk of copyright infringement.
    get out a paper and pencil and think about how you would figure this out by hand.
    The structure of a program will emerge from the mists.
    Now that I think about it that advice must be in public domain by now.
    Edited by: johndjr on Oct 14, 2008 3:31 PM
    added additional info

  • Urgent  : can help me in my search program( mofication of my program)

    Requirements:
    <u>Selection-Screen</u>:
    Parameter: String field to enter a text
    Select-option: to enter program names (value help shall be available)
    <u>Program</u>:
    The user shall enter a text and select one or serveral program names. (Search help for the pro-gram names.)
    The coding of the selected programs than are searched for the entered string (text).
    (nice to have, but not necessary: if the user makes a double click on a line of the result list (see below) it is jump into the ABAP editor an the coding is displayed in display mode).
    Output:
    Display in a ABAP list OR in a ALV list the program name, the line number and the coding / text auf the line, where the search term as found.
    <u>My Program coding</u>
    TABLES: trdir,rs38m.
    PARAMETER      : pa_text(30) type c.
    SELECT-OPTIONS : so_name FOR trdir-name MATCHCODE OBJECT ZSH_EXAMPLE.
    data:   begin of jtab occurs 0,
            line(300),
            end of jtab.
    data  : wa like jtab.
    DATA : rata LIKE trdir OCCURS 0 WITH HEADER LINE.
    DATA : repid type sy-repid.
    DATA : fval type trdir-name.
    DATA : cnt type n.
    DATA : off type n.
    SELECT name FROM trdir INTO rata WHERE name IN so_name.
    append rata.
    ENDSELECT.
    WRITE: /02 'PrgName', 53 'Text',95 'Line No'.
    uline.
    LOOP AT rata.
    read report rata-name into jtab.
    jtab-line = rata-name.
      append jtab.
      search jtab for pa_text.
      if sy-subrc = 0.
      WRITE : /02  rata-name, 50 pa_text,90 sy-tabix.
      endif.
    ENDLOOP.
    *LOOP AT jtab.
    *ENDLOOP.
    AT LINE-SELECTION ******************
    AT LINE-SELECTION.
    get cursor value fval.
    Set parameter id 'RID' field  rata-name.
    EDITOR-CALL FOR REPORT fval DISPLAY-MODE.
    *read
    *find
    *search
    The problem is that i can display the list of program which contains the given string....
    but when I double click on the program name... its not displaying  the code of particular particular program .
    so anyone help me to modify my program or send me a new code

    REPORT  ZSEARCH_HELP
    DATADEKLARATION *****
    TYPE-POOLS: slis.
    TABLES: tadir.
    Tables
    DATA: gt_output TYPE TABLE OF zstruct_output.  (here create a search help in se11)
    Structures
    DATA: gs_output TYPE zstruct_output.
    Fields
    DATA: gv_mess TYPE text60.
    Constants
    CONSTANTS: gc_s TYPE msgty VALUE 'S',
               gc_r3tr TYPE pgmid VALUE 'R3TR',
               gc_prog TYPE trobjtype VALUE 'PROG'.
    SELECTION SCREEN *****
    SELECTION-SCREEN: BEGIN OF BLOCK sel WITH FRAME TITLE sel_txt.
    SELECT-OPTIONS: s_repid FOR tadir-obj_name.
    PARAMETERS: p_seatxt TYPE string.
    SELECTION-SCREEN: END OF BLOCK sel.
    SELECTION SCREEN VALUE HELP *****
    REPID_LOW
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_repid-low.
    call search help
      PERFORM prog_search_help CHANGING s_repid-low.
    REPID_HIGH
    AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_repid-high.
    call search help
      PERFORM prog_search_help CHANGING s_repid-high.
    AT LINE-SELECTION *****
    AT LINE-SELECTION.
    line selection -> double click functionality
      PERFORM jump_into_coding USING gs_output-prog gs_output-line.
    INITIALIZATION ******
    INITIALIZATION.
      sel_txt = 'Date selection'(001).
    s_repid-sign = 'I'.
    s_repid-option = 'CP'.
    s_repid-low = 'Z*'.
    APPEND s_repid.
    START-OF-SELECTION ******
    START-OF-SELECTION.
      CLEAR: gt_output[],
             gs_output,
             gv_mess.
    select data and determine where search string is used
      PERFORM select_progs CHANGING gt_output.
    END-OF-SELECTION.
      IF NOT gt_output[] IS INITIAL.  "found data
    display the found data
        PERFORM display_data CHANGING gt_output.
      ELSE. "no data was found
        gv_mess = 'No data was found'(003).
        MESSAGE gv_mess TYPE gc_s.
      ENDIF.
    SUB-ROUTINES *****
    *&      Form  select_progs
          Determine programs where the search string is used
    -->  pt_output   Output data
    FORM select_progs CHANGING pt_output LIKE gt_output.
      DATA: BEGIN OF ls_progs,
             prog TYPE programm,
            END OF ls_progs.
      DATA: lt_progs LIKE TABLE OF ls_progs.
    select all progams into a internal table
      SELECT obj_name
        FROM tadir
        INTO TABLE lt_progs
        WHERE pgmid = gc_r3tr AND
              object = gc_prog AND
              obj_name IN s_repid.
      IF sy-subrc = 0.  "selection was successful
        LOOP AT lt_progs INTO ls_progs.
    search coding of the programms for the search string
          PERFORM search_coding USING ls_progs-prog
                                CHANGING pt_output.
        ENDLOOP.
      ELSE.   "selection was not successful -> error message
        gv_mess = 'Search string not found in selected programs'(002).
        MESSAGE gv_mess TYPE gc_s.
      ENDIF.
    ENDFORM.                    " select_progs
    *&      Form  search_coding
          search every selected program for the search string
         -->PS_PROGS   Program name
         <--PT_OUTPUT  output data
    FORM search_coding  USING    pv_prog TYPE any
                        CHANGING pt_output LIKE gt_output.
      DATA: lt_coding TYPE TABLE OF string,
            lv_coding TYPE string.
      CLEAR gs_output.
    read coding into internal table
      READ REPORT pv_prog INTO lt_coding.
      IF sy-subrc = 0.  "Coding was read
    move program name
        gs_output-prog = pv_prog.
    search for search text
        LOOP AT lt_coding INTO lv_coding.
          SEARCH lv_coding FOR p_seatxt.
          IF sy-subrc = 0.
    move found line
            gs_output-line = sy-tabix.
            gs_output-text = lv_coding.
            APPEND gs_output TO pt_output.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDFORM.                    " search_coding
    *&      Form  display_data
          display the result data
         <--PT_OUTPUT  result data
    FORM display_data CHANGING pt_output LIKE gt_output.
      LOOP AT pt_output INTO gs_output.
        WRITE: / gs_output-prog LEFT-JUSTIFIED NO-GAP,
                 gs_output-line,
                 gs_output-text.
        HIDE: gs_output-prog, gs_output-line.
      ENDLOOP.
    DATA: lt_fieldcat TYPE TABLE OF slis_fieldcat_alv.
    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
      EXPORTING
        i_program_name               = sy-repid
        i_internal_tabname           = 'GT_OUTPUT'
       I_STRUCTURE_NAME             = 'ZSTMP_SEARCH_PROG'
       I_CLIENT_NEVER_DISPLAY       = 'X'
       I_INCLNAME                   =
       I_BYPASSING_BUFFER           =
       I_BUFFER_ACTIVE              =
       CHANGING
         ct_fieldcat                  = lt_fieldcat
    EXCEPTIONS
       inconsistent_interface       = 1
       program_error                = 2
       OTHERS                       = 3
    IF sy-subrc <> 0.
       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
      I_INTERFACE_CHECK                 = ' '
      I_BYPASSING_BUFFER                = ' '
      I_BUFFER_ACTIVE                   = ' '
       I_CALLBACK_PROGRAM                = sy-repid
      I_CALLBACK_PF_STATUS_SET          = ' '
       I_CALLBACK_USER_COMMAND           = ' '
      I_CALLBACK_TOP_OF_PAGE            = ' '
      I_CALLBACK_HTML_TOP_OF_PAGE       = ' '
      I_CALLBACK_HTML_END_OF_LIST       = ' '
      I_STRUCTURE_NAME                  =
      I_BACKGROUND_ID                   = ' '
      I_GRID_TITLE                      =
      I_GRID_SETTINGS                   =
      IS_LAYOUT                         =
         it_fieldcat                       = lt_fieldcat
      IT_EXCLUDING                      =
      IT_SPECIAL_GROUPS                 =
      IT_SORT                           =
      IT_FILTER                         =
      IS_SEL_HIDE                       =
      I_DEFAULT                         = 'X'
      I_SAVE                            = ' '
      IS_VARIANT                        =
      IT_EVENTS                         =
      IT_EVENT_EXIT                     =
      IS_PRINT                          =
      IS_REPREP_ID                      =
      I_SCREEN_START_COLUMN             = 0
      I_SCREEN_START_LINE               = 0
      I_SCREEN_END_COLUMN               = 0
      I_SCREEN_END_LINE                 = 0
      I_HTML_HEIGHT_TOP                 = 0
      I_HTML_HEIGHT_END                 = 0
      IT_ALV_GRAPHICS                   =
      IT_HYPERLINK                      =
      IT_ADD_FIELDCAT                   =
      IT_EXCEPT_QINFO                   =
      IR_SALV_FULLSCREEN_ADAPTER        =
    IMPORTING
      E_EXIT_CAUSED_BY_CALLER           =
      ES_EXIT_CAUSED_BY_USER            =
       TABLES
         t_outtab                          = pt_output
      EXCEPTIONS
        program_error                     = 1
        OTHERS                            = 2
    IF sy-subrc <> 0.
       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    ENDFORM.                    " display_data
    *&      Form  prog_search_help
          search help for program field
    -->  pv_repid  program name
    <--  p2        text
    FORM prog_search_help CHANGING pv_repid TYPE any.
    use standard function module
      CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4'
        EXPORTING
          object_type                     = 'PROG'
          object_name                     = pv_repid
        ENCLOSING_OBJECT                =
        SUPPRESS_SELECTION              = 'X'
        VARIANT                         = ' '
        LIST_VARIANT                    = ' '
        DISPLAY_FIELD                   =
        MULTIPLE_SELECTION              =
        SELECT_ALL_FIELDS               = ' '
         WITHOUT_PERSONAL_LIST           = ' '
        PACKAGE                         = ' '
          use_alv_grid                    = ' '
       IMPORTING
         object_name_selected            = pv_repid
        ENCLOSING_OBJECT_SELECTED       =
        STRUCINF                        =
      TABLES
        OBJECTS_SELECTED                =
        RECORD_TAB                      =
       EXCEPTIONS
         cancel                          = 1
         wrong_type                      = 2
         OTHERS                          = 3
      IF sy-subrc <> 0.
       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.                    " prog_search_help
    *&      Form  jump_into_coding
          jump into the coding
         -->P_GS_OUTPUT_PROG  text
         -->P_GS_OUTPUT_LINE  text
    FORM jump_into_coding USING pv_prog TYPE program
                                pv_line TYPE any.
      EDITOR-CALL FOR REPORT pv_prog DISPLAY-MODE.
    ENDFORM.                    " jump_into_coding

  • Need help on combining these two program

    Hi all,
     I needed some help on combining these two program. But i not very sure how to do it.
    My program in working with TimeIn/TimeOut attendance taking. The snippet vi "insert data" is the where i start to TimeIn and insert into the microsoft access. And i wanted to insert it together with a camera catching the user's face. But i have no clues on how to combine them.
     Can u guys give me some ideas to help me ?
    Thanks in advance.
    Attachments:
    IMAQdx.png ‏55 KB
    insert data.png ‏68 KB

    Hi Himanshu,
    But if i put everything inside the IMAQdx loop ,it make my whole program more complicated. 
    This is how my program looks like below.
    I only want to display the image only when i "insert" all data into the database ( which i given at the perivous post).
    Is there other way?? And how do u make the IMAQdx loop stop without putting a stop button?? Because everytime i run the program,it will run continuously at the IMAQdx loop..
    Thank in Advance.
    Attachments:
    FYP.png ‏205 KB

  • Pls help to understand this routine program

    Pls help to understand this routine program written in transformation level for a field.
    Data a Type /bic/oizsnote_2.
    Data: l_len type i,
          l_time type i.
    Move source_fields-zztdline+60(60) TO a.
    l_len = STRLEN(a).
    DO l_len TIMES.
    IF a+l_time(1) CN
    ',<>?/:;"''ABCDEFGHIJKLMNOPQTRSTUVWXYZ abcdefghijklmnopqrstuvwxyz!%^&' & '*' & "()__+=12346567890'
    a+l_time(1) = '~'.
    Endif.
    l_time = l_time + 1.      
    enddo.
    replace all occurrences of '~' in a with space.
    Result = a.
    not having much exposure in ABAP programming.
    Raj

    In addition to the above to posts..
    HI Raj,
    Your routine is used to remove the invalid characters.
      IF  A+l_time(1)  CN
    A is a Char which contains the data .*
      I_time is used for iteration(itu2019ll check each char by char in a word/Sentence).
    *CN u2013 Contains not
    ,?/:;"''ABCDEFGHIJKLMNOPQTRSTUVWXYZ abcdefghijklmnopqrstuvwxyz!%^&' & '*' & "()__+=12346567890.
    These are the Valid chars and numbers which will be accepted by BW system, System will throw an error only when load receives a char which is not there in the above. And that char will be treated as a Invalid Char.
    A+l_time(1) = '~'.
    What ever the special/Invalid char appears in the load apart from the above mentioned, system will convert  them to u2018~u2019
    REPLACE ALL OCCURRENCES OF '~' IN a WITH space.
       CONDENSE A.
    System will replace all the ~ with space, then condenses the space.
    You can do this using RSKC transaction instead of going for routine.

  • Cluster VI Reference Minor Bug

    Over on LAVA PJM_labview posted a video of a bug found in LabVIEW 2013 SP1.  It is a minor bug with the block diagram when showing a cluster constant with a VI reference constant in it.  Here is the video of how to reproduce the bug.
    http://screencast.com/t/gfKwlvMcCsHI
    And here is the original thread on LAVA.
    http://lavag.org/topic/18297-cool-little-lv-2013-sp1-bug/#entry109757
    Unofficial Forum Rules and Guidelines - Hooovahh - LabVIEW Overlord
    If 10 out of 10 experts in any field say something is bad, you should probably take their opinion seriously.

    I played with this and filed it as a CAR (#479432). Intriguingly, there are a couple workarounds:
    Option 1
    On block diagram:
    1. Create cluster constant containing refnum with auto-sizing set as arranged (vertical or horizontal)
    2. Create typedef
    3. Unlink from type def
    4. Change auto-sizing to desired value
    5. Recreate typedef
    Option 2
    On front panel:
    1. Create cluster containing refnum control
    2. Create typedef
    On block diagram:
    3. Create constant from cluster typedef on block diagram.
    4. Unlink constant from typedef, change auto-sizing as desired, recreate typedef
    Christopher S. | Applications Engineer
    Certified LabVIEW Developer
    "If in doubt... flat out." - Colin McRae

  • R5034 Runtime error when updating ITunes  help - deleted all iTunes/Apple programs and reinstalled ITunes

    R5034 Runtime error when updating ITunes  help - deleted all iTunes/Apple programs and reinstalled ITunes
    help please ?

    solved problems and reinstalled  - 4 hours wasted trying to fix iTunes ...
    Apple could do better to inform users when updating and upgrading  .....

  • Site feedback & help with a bug

    Hello,
    We are busy with final testing of a clients site at
    this
    address
    Any feedback would be appreciated. Also, we're experiencing a
    bug while testing on IE6. Doesn't appear to happen with Firefox.
    I can replicate it every time by doing this: enter
    site>skip> go to 'go underground' click the link to download
    map>go to 'guerrilla marketing'. When I go back to 'Guerrilla
    Marketing', the scroller component with the tetris pieces shows up
    beyond its visual range. ie it is displaying behind the buttons
    etc. when it clearly should not. I have not had any problems with
    any of the other scrollers in 'guerrilla headlines' so am a little
    confused. I tried on another machine with IE6. Bug appeared
    instantly without having to click the download link.
    I am a designer and deal with graphics and animation. I'm
    afraid when it comes to scripting I'm a bit clueless. If anyone has
    any ideas with regard to action script, please post them and I'll
    send them on to my business partner, the coding chap. :)

    AAH-chooo!
    Bump.

  • Ok in need of desperate help... apps or programs that make, making an elementary yearbook easy?

    ok in need of desperate help... apps or programs that make, making an elementary yearbook easy?
    the clock is ticking!!!

    Search at MacUpdate or CNET Downloads.

  • Minor bug in user interface

    I have noticed a minor bug in the user interface... the font color in develop module changes to barely legible whilst editing values using keyboard. Does not seem to affect the font when using sliders to change  values.

    We've got that one bugged, thanks au2045

  • [svn] 4513: Minor bug fixes.

    Revision: 4513
    Author: [email protected]
    Date: 2009-01-13 13:46:08 -0800 (Tue, 13 Jan 2009)
    Log Message:
    Minor bug fixes.
    * pausing effect currently sleeping through its startDelay now works
    * new effects now work correctly with nonzero repeatDelay
    * ASDoc fixes for ANIMATION_REPEAT event
    QE Notes: None
    Doc Notes: None
    Bugs: sdk-17993, sdk-17842, sdk-18672
    Reviewer: Jason
    Tests: checkintests, Mustella: Effects, gumbo/effects, ListDataEffects
    Ticket Links:
    http://bugs.adobe.com/jira/browse/sdk-17993
    http://bugs.adobe.com/jira/browse/sdk-17842
    http://bugs.adobe.com/jira/browse/sdk-18672
    Modified Paths:
    flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/Animation.as
    flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/FxAnimate.as
    flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimateInstance.a s
    flex/sdk/trunk/frameworks/projects/flex4/src/mx/events/AnimationEvent.as

    It means that small issues in the software were fixed.

Maybe you are looking for

  • How to connect a macbook to an external projector?

    I would like to connect my macbook to my school's projector for presentation and it seems the projector cable at school doesn't fit into any slot in my macbook. What kind of cable do I need? I remember the cable at school is able to plug into any PC,

  • My iPod touch 4g has died, I tried to recover it, it won't work?

    I saved up for 6 months for my ipod touch 4g and paid 170 pounds for it. I was very pleased with it, but now it has just gone out of the 1-yr guarantee I am experiencing problems: First, a sign came up saying "No more iCloud storage is available" and

  • CRM_RESOURCE_THREAD abend with SP8

    Last night I was patching an occasional clients cluster and ran into some trouble. I installed this cluster in early 2005 when NW65SP3 was roaming the earth... I havent been back since, and they havent done any maintenance. Last week, as they were wr

  • VPN tunnels for multiple sites

    Hi, i am building new vpn tunnels for multple sites using 2 ASR 1004, and 100 remote devices cisco 2800 routers. I am thinking of using getvpn to do it, am i thinking correct ????? can i use DMVPN ???? what is else there ??? thanks 

  • Skype auto signs me out just after logging in

    Hello, As soon as I log in skype, it is automatically logging me out with the message"You have been signed out". This issue presist in my phone, windows machine as well as Mac machine. Please fix this issue as soon as possible. Thank you, Regards, Pr