BytesLoaded preloader not accurate for FLVs

Hi Peeps,
After wrestling this flash flv slideshow for the last few days, I finally have it running smoothly locally.  The problem is that on a server it has serious issues.  I see a blank screen where the flv should be... I assume it's still loading or buffering.  That's a problem as is, but when it's in this state, nothing else works on the site (flash site-one swf).  If you wait for sometimes 10 minutes the flv finally shows and the site works great.  All of this obviously depends on the connection.
So I understand that this could be caused by the size of the 10 flvs.  I'm using the FLVplayback component by the way.  So that's fine for now, but I just want a preloader at the beginning to only go to frame 2 after the intro flv has been loaded.  I thought this would be simple using bytesTotal and bytesLoaded.  I was wrong.  Below is the code I'm using.  When you view the page the preloader seems to work, but after it runs - you are directed to the second frame... showing the "skip intro" button (which doesn't exist on the 1st frame)... but the flv doesn't show.  It's actually still loading... 5-10 minutes later it shows up and the site works fine.  My preloader isn't showing the progress of the flv load.
You can see what I'm talking about by viewing my project... if you're on a connection like mine you won't be seeing much: http://www.ia21.org/dan/dan.html
Does anyone know of a preloader specifically for FLVs... maybe one that reads the buffer progress?
//my FLVplayback comp. has an instance name of introMov.  It does exist on the 1st frame, but is not visible.  It's visible on frame two.
addEventListener(Event.ENTER_FRAME, preLoad)
function preLoad(e:Event):void
    var bytestoLoad:Number = introMov.loaderInfo.bytesTotal;
    var numberLoaded:Number = introMov.loaderInfo.bytesLoaded;
          if (bytestoLoad == numberLoaded)
          removeEventListener(Event.ENTER_FRAME, preLoad);
          gotoAndStop(2);
          else
          preLoader.preLoaderFill.scaleX = numberLoaded/bytestoLoad;
          preLoader.bytesPercent.text = Math.floor(numberLoaded/bytestoLoad*100) + "%";

I wish I could help. I'm more or less in the same situation.  Don't know if you've checked this out but there's a makeshift solution here:
http://www.adobe.com/devnet/flash/articles/vidgal_structure.html
I ditched the FLV component.  My idea was to attach a NetStream to a video object, and hold on the first frame of the FLV (either that or temporarily load a static jpg of the first frame). Then use the pseudo pre-loader example above to show a loading animation while the flv comes in.
So far no dice. My code is all over the floor right now so I can't attach it - sorry.
That said I'm this close to bailing on flash.
It's like pulling teeth. It's agonizing.  I've come up with a peace accord for the middle east while trying to figure out AS error codes.  I decode the human genome to get relief from AS. I can't wait till we can all laugh about it in 20 years. "Son, when I was a boy I had to program in Action Script and it was so *** backwards it took me a week to figure out a bloody FLV preloader".
Lonny
PS I checked your link. It seems you figured it out? Can you post your code before I enroll in 5 years of computer science?

Similar Messages

  • Preloader not working for 35 MB swf file. Please help!

    Hello,
    I'm working on a glorified slideshow, it has a music track that is 3+ minutes long, pretty nice graphics, and transitions. I started builing in Flash and am halfway done... it looks great too !
    Problem is, when I'm testing the preloader with the download profiler set to DSL - it crawls and at 1% and on, the soundtrack starts to play... by the time the download is at 42% its at least a minute into the soundtrack and it's in and out, coming on then cutting out but not starting over. Needless to say, this is not okay! I know it's a huge file. SHould I maybe export it as an mov and put it in a FLV player?
    Thanks for reading & helping
    Ms.Lee

    Ok, so my preloader code was all wrong, now it's this:
    import flash.events.ProgressEvent;
    var request:URLRequest = new URLRequest("HitTheGround6.swf");
    var ldr:Loader = new Loader();
    this.addChild(ldr);
    ldr.x=0;
    ldr.y=0;
    ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
    ldr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
    ldr.load(request);
    function progressHandler(evt:ProgressEvent):void {
        var percent:Number = evt.target.bytesLoaded / evt.target.bytesTotal;
        preloader.fill.scaleX = percent;
    function completeHandler(evt:Event):void {
        this.removeChild(preloader);
        evt.target.content.gotoAndPlay(2);  //this is the key
    This awesome blog post has the files & explaination!!!
    http://www.negush.net/blog/how-to-preload-as3-clips/

  • EXIF Profile Name Not Accurate for Nikon RAW

    I am shooting RAW with a Nikon D90. When I import, the EXIF metadata in Aperture 2 and Finder always says Profile Name = Adobe RGB (1998). The camera is set to sRGB, not Adobe -- Capture NX2 seems to know, why doesn't Aperture/ OS X?
    I'd be more accepting if it was blank, but I don't like that the wrong information is displayed.
    Has anyone else noticed this?

    Internally Aperture seems to use a unique color space for each different RAW type and always uses the wider gamut Adobe RGB as a default for RAW in terms of display/previews/etc. This is not an issue. Your RAW file has not been altered in any way, it's exactly as it was when it came out of the camera. This has been discussed here about 1mm times.
    When you export from Aperture you can choose any color profile that you would like for the exported version. If you are experiencing some sort of issue related to this I am sure that many here would be glad to help.
    RB

  • Preloader - export frame for AS 2 Classes - not initizialising component

    I am using Yahoo's Map Component on a website. When I edit
    the Export Frame in Publish settings so that the AS classes are
    exported on a frame other than 1 (so my preloader is accurate) my
    component does not initialize. I've researched relentlessly on a
    solution to this, apparently the same happens for some default
    Flash components, and just cannot find one.
    Does anyone have any ideas?
    In addition AS2 Classes add nearly 400k to my file size. Is
    there anyway around this?

    click file/publish settings/flash/actionscript settings and make sure frame 1 is set as the export frame.
    if that's already set, don't use test scene.

  • I need H.264 / mp4. Compressor does not deliver for JW FLV Player

    Alright,
    I've been fighting this all day now. Why does QuickTime Conversion in Final Cut Pro have a way to convert to H.264 but Compressor does not? It only has "H.264 for Apple Devices". Why only for Apple devices? I don't get it.
    I'm exporting for the web. I'm using the JW FLV Media Player
    http://www.longtailvideo.com/players/jw-flv-player/
    There is no Video ONLY Audio with files converted with Compressors MPEG-4 when viewed on the PC or a Web browser. MPEG-4 makes it Apple MPEG4 Decompressor which is not compatible on everything.
    I need a universal format for the web. The MP4 QT Export feature in FCP works great but there are no presets like in Compressor.
    Apple and Adobe will soon no longer be supporting FLV so I need another solution.

    Yes! Exactly, Thank you.
    Because compressor makes it Apple MPEG4 Decompressor. So anyone not using a Mac can't view the video. The H.264 presets in Compressor are worthless. They have pre-configured settings compressed so freakin' high your video looks like a swamp.
    Mov. files do not work well with JW Player because they do not buffer for Windows users and unless you are using a Mac, the compatibility is terrible for PC guys.
    For me, the best solution for JW Player is to use the QuickTime Export in Final Cut as follows:
    In Final Cut Pro ::
    1. Choose File > Export > Using Quicktime Conversion.
    2. For format choose MPEG-4.
    3. Windows Shows. Choose MP4 for file format.
    4. Video format choose H.264.
    5. Data rate to 800 kbps.
    6. Adjust Image Size.
    7. AAC for Audio format/128kbps/stereo/44.1/best.
    8. Stream No.
    If anyone has a better solution for JW Player, please reply. But so far this is the best working and highest quality setting for JW Player... while still having a small file too.
    Thanks!
    -c

  • Trying to view my usage for text messaging and it's not accurate??  Is there a problem w/ the page?

    Trying to view my usage for text messaging and it's not accurate.  Is there a problem w/ the page?

    Sometimes there can be a lag in reporting.  If you have an iPhone, iMessages don't show up on the log.  What part of the usage isn't accurate?

  • Render Times on FCP Not Accurate?

    Hi, <- My casual Greeting
    Hopefully there are a few video editors out there on the forum... cause this one is program specific....
    So I have been an avid Final Cut Pro guy for the last 4 years. I love the program.... I can work very easily in it but recently I got a new job in which I have been using both FCP and Adobe Premier.
    Here is my issue... I have been using files that come in as MPEG 2 and have been using MPEG Streamclip to convert them over to a ProRes file for FCP. From FCP I have had to export them into 3 formats
    1. Mpeg 4 (the file format our website takes)
    2. FLV (Format for online video sites)
    3. QuickTime (XDCAM) for our tricaster
    The last week I have been using FCP and my render times have been (for a 5 min clip)
    1. Mpeg 1 hour+
    2. FLV 20 min+
    3. QuickTime (XDCAM) 1 hour +
    Yesterday I was told to use Premier as my boss uses Premier on a regualr basis and I assured him that the times would be the same as FCP is a Mac native program and that Premier was made to work on a mac but is essentially a PC program (I am eating my words now)...
    I redid the renders on the same file...
    On premier the render times were
    1. Mpeg 30+ min
    2. FLV 12 min
    3. QuickTime (XDCAM) 40 min
    Why is this? Do I just have something really messed up in my settings that FCP is not rendering quickly and Premier is? I would hate to have to hop over to Premier... I enjoy using FCP way to much.
    The other question I have is why are FCP render times not accurate...
    The renders will start saying 5 min then 10 then an hour etc.... and the time will not be accurate. If it says 5 min it may go for an hour... or if it says an hour it may just complete while still telling me I have an hour to wait.
    Adobe Premier, right off the bat, will tell me the frame it is on and the percent and time left... almost to the T.
    If possible... please help me get my fcp back on the right track.
    Tim

    Rendering can be much faster if you have a multi core intel Mac and you use Qmaster with Quick Clusters.
    Here's how.
    Set up Quick Clusters in Qmaster. (A description of how to do this is in the manual and also can be found in the Qmaster forum here in the Apple discussions as well as out on the web.)
    Export your sequence from FCP using "current settings". (Do NOT use Quicktime Conversion!)
    Open up Compressor and submit your file. Add the three output elements.
    Submit the file and click "use unmanaged services"
    Go have a cup of coffee while all the cores chug away at things. I guarantee it will be faster than the way you are currently exporting (if you aren't using clusters)
    x

  • Timer Class not accurate and slows down my animation!?

    Does anyknow how why my timer object is not accurate and why it slows down my animation that is also present on my GUI at the same time?
    I have a timer in the form of 0.00 the left of the decimal point should represent a second but it doesnt, run my code and see for yourselves. below is my code if anyone can fix these 2 problems i will be very thankfull:
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.Shape;
    import java.io.*;
    import java.text.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.swing.Timer;
    import java.sql.*;
    import java.text.*;
    public class RT extends JFrame implements MouseMotionListener
        //declares a number of swing componets to be used for the JFrame
        private JTextArea infoJTextArea;
        private JPanel showJPanel, startJPanel, helpJPanel, resultsJPanel;
        private JLabel de4JLabel, de3JLabel, mainTitleJLabel, nameJLabel, ageJLabel,
                       deJLabel, de1JLabel, de2JLabel, timeJLabel,nameResultJLabel,
                       ageResultJLabel, timeResultsJLabel, ratingJLabel, coJLabel, shJLabel;
        private JTextField nameJTextField, ageJTextField,nameResultJTextField,
                       ageResultsJTextField, timeResultsJTextField, ratingJTextField;
        private JButton exitJButton, showJButton, loginJButton, startTestJButton,
                        tempObjectJButton;
        private JScrollPane scroll;
    public JComboBox colourJComboBox, sizeJComboBox, shapeJComboBox, speedJComboBox;
    private static Connection dbcon;
    int temp=0;
    private String[] col = { "Red", "Blue", "Green","Yellow","Orange","Black"};
    private String[] shapeA = { "Normal Rectangle", "Normal Circle", "Normal Oval","BIG Rectangle", "BIG Circle","BIG Oval","small rectangle","small circle", "small oval"};
    private String[] speed = { "Fast", "Normal", "Slow"};
    public int checking;
    static int flag, flagshape, flagspeed;
        // creates and sets up a number of varibles to be used by the class
        public long timeLimit = 0;
        DecimalFormat timeDec = new DecimalFormat (":00");
        public int age;
        public String name, shapeChoice="Normal Rectangle(Never selected anything)", colourChoice="Black(Never selected anything)";
        private Timer TimeNow;
        private JTextField timerJTextField;
        ShapeMovingPanel testJPanel;
        Random seed;
        Shape shape;
        Shape[] shapes = {new Rectangle2D.Double(50, 30, 75, 25),new Ellipse2D.Double(175, 125, 50, 50),new Ellipse2D.Double(90, 100, 75, 35),new Rectangle2D.Double(50, 30, 175, 125),new Ellipse2D.Double(175, 125, 125, 125),new Ellipse2D.Double(90, 100, 175, 135),new Rectangle2D.Double(50, 30, 55, 15),new Ellipse2D.Double(175, 125, 20,20),new Ellipse2D.Double(90, 100, 55, 15)};
    //50, 30, 75, 25 change starting point here****************************************
        public RT()            // constructor method
            seed = new Random();
            shape = shapes[0];
            //sets up the Timer
            TimeNow = new Timer((1), new TimerListener());//++++++++++++++++++++++++++timer -17
            createUserInterface();          // method that creates the user interface     
        private void createUserInterface()
            new Thread(new Runnable()
                public void run()
                    String results = "";
                    int count = 0;
                    boolean journeyOn = true;
                    while(journeyOn && count < 3)
                        try
                            Thread.sleep(1000);
                        catch(InterruptedException ie)
                            System.err.println("show interrupt: " + ie.getMessage());
                            journeyOn = false;
                        results += count++ + ", ";
                    try {
                             Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                             dbcon = DriverManager.getConnection("jdbc:odbc:CMT3991", "", ""); // Access/ODBC
                          //connection ash used to connect to the user table in access
                           } catch(Exception eee)
                           eee.printStackTrace();  //exception if error occurs during the driver connection
                             System.out.println("* UserDA CONNECTED *");
            }).start();
            Container contentPane = getContentPane();
            contentPane.setLayout( null );
            // set up infoJTextField
            infoJTextArea = new JTextArea();
            infoJTextArea.setBounds( 20, 420, 550, 170  );
            infoJTextArea.setEditable( false);
            infoJTextArea.setText("\n    Welcome to the reaction testing program, this " +
                            "program is designed to test your reactions in a  \n"+
                            "    number of different situations.\n"+"\n    Please " +
                            "enter your name and age, or select show previous results.");
            contentPane.add( infoJTextArea );
            scroll = new JScrollPane(infoJTextArea);
            scroll.setBounds(  20, 420, 550, 170 );
            contentPane.add( scroll );
                  startJPanel = new JPanel();
            startJPanel.setBounds( 16,16, 560, 375 );
            startJPanel.setBorder(
                    new TitledBorder( "WELCOME - PLEASE ENTER YOUR NAME AND AGE:" ) );
            startJPanel.setLayout( null );
            contentPane.add( startJPanel );
            //sets up a JPanel
            mainTitleJLabel = new JLabel();
            mainTitleJLabel.setIcon( new ImageIcon( "title.png" ) );
            mainTitleJLabel.setBounds( 30, 10, 520, 170 );
            mainTitleJLabel.setHorizontalAlignment( JLabel.CENTER );
            startJPanel.add( mainTitleJLabel );
            //creates a newJLabel
            nameJLabel= new JLabel();
            nameJLabel.setBounds( 52, 200, 70, 35 );
            nameJLabel.setText("Name:");
            startJPanel.add( nameJLabel);
            //creates a new JTextField
            nameJTextField = new JTextField();
            nameJTextField.setBounds( 130, 200, 300, 24 );
            startJPanel.add( nameJTextField );
            //creates a newJLabel
            ageJLabel = new JLabel();
            ageJLabel.setBounds( 52, 245, 100, 35 );
            ageJLabel.setText("Age:");
            startJPanel.add( ageJLabel );
            //creates a new JTextField
            ageJTextField = new JTextField();
            ageJTextField.setBounds( 130, 245, 300, 24 );
            startJPanel.add( ageJTextField );
            //creates a JButton
            loginJButton = new JButton();
            loginJButton.setBounds( 440, 200, 90, 24 );
            loginJButton.setText( "Login" );
            loginJButton.setBackground( Color.YELLOW );
            startJPanel.add( loginJButton );
            loginJButton.setEnabled(true);
    //        loginJButton.setVisible(true);
            loginJButton.addActionListener(
                new ActionListener()    // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                        // not necessary to pass events to these methods...
                        Login();  // calls the Login method                       
            //creates a JButton
            showJButton = new JButton();
            showJButton.setBounds( 200, 320, 180, 24 );
            showJButton.setText( "Show previous results" );
            showJButton.setBackground( Color.YELLOW );
            startJPanel.add( showJButton );
            showJButton.setEnabled(true);
    //        showJButton.setVisible(true);
            showJButton.addActionListener(
                new ActionListener()    // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                        showData();   // calls the showData method                       
            //sets up a JPanel
            showJPanel = new JPanel();
            showJPanel.setBounds( 16,16, 560, 375 );
            showJPanel.setBorder(new TitledBorder( "PREVIOUS RESULTS:" ) );
            showJPanel.setLayout( null );
            contentPane.add( showJPanel );
            //sets up a JPanel
            helpJPanel = new JPanel();
            helpJPanel.setBounds( 16,16, 560, 375 );
            helpJPanel.setBorder(
            new TitledBorder( "CHOOSE A NUMBER OF OPTIONS AND GET READY:" ) );
            helpJPanel.setLayout( null );
            helpJPanel.setVisible(false);
            contentPane.add( helpJPanel );
            //creates a newJLabel
            deJLabel= new JLabel();
            deJLabel.setBounds( 23, 390, 530, 35 );
            deJLabel.setText("Details:");
            contentPane.add( deJLabel);
            //creates a newJLabel
            coJLabel= new JLabel();
            coJLabel.setBounds( 70, 40, 530, 35 );
            coJLabel.setText("Choose a colour:");
            helpJPanel.add( coJLabel);
            //creates a newJLabel
            de1JLabel= new JLabel();
            de1JLabel.setBounds( 25, 100, 530, 35 );
            de1JLabel.setText("You are about to start the reaction test, when you " +
                              "press the start button it will begin.");
            helpJPanel.add( de1JLabel);
            //creates a newJLabel
            de1JLabel= new JLabel();
            de1JLabel.setBounds(160, 145, 530, 35 );
            de1JLabel.setText("Simply catch the moving item and click.");
            helpJPanel.add( de1JLabel);
            colourJComboBox = new JComboBox( col );
               colourJComboBox.setBounds( 70, 70, 135, 21 );
               colourJComboBox.setMaximumRowCount( 3 );
               helpJPanel.add( colourJComboBox );
              colourJComboBox.addActionListener(
                new ActionListener() // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                         colourChoice="Black";
                         int x = colourJComboBox.getSelectedIndex();
                        if( x  == 0)
                             flag = 1;
                             colourChoice="Red";
                        else if(x  == 1)
                             flag = 2;
                             colourChoice="Blue";
                        else if(x  == 2)
                             flag = 3;
                                colourChoice="Green";
                         else if(x  == 3)
                             flag = 4;
                                colourChoice="Yellow";
                         else if(x  == 4)
                             flag = 5;
                                colourChoice="Orange";
                           else if(x  == 5)
                             flag = 6;
                                colourChoice="Black";
            shJLabel= new JLabel();
            shJLabel.setBounds( 340, 40, 530, 35 );
            shJLabel.setText("Choose a shape and size:");
            helpJPanel.add( shJLabel);
            shapeJComboBox = new JComboBox( shapeA );
               shapeJComboBox.setBounds( 340, 70, 135, 21 );
               shapeJComboBox.setMaximumRowCount( 3 );
               helpJPanel.add( shapeJComboBox );
              shapeJComboBox.addActionListener(
                new ActionListener() // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                          int xshape = shapeJComboBox.getSelectedIndex();
                        //shapeChoice="Normal Rectangle";
                        if( xshape  == 0)
                        {     flagshape = 1;
                             shapeChoice="Normal Rectangle";
                        else if(xshape  == 1)
                        {     flagshape = 2;
                             shapeChoice="Normal Circle";
                        else if(xshape  == 2)//**********here
                        {     flagshape = 3;
                             shapeChoice="Normal Oval";
                        else if(xshape  == 3)
                        {     flagshape = 4;
                             shapeChoice="BIG Rectangle";
                        else if(xshape  == 4)
                       {      flagshape = 5;
                             shapeChoice="BIG Circle";
                        else if(xshape  == 5)
                     {        flagshape = 6;
                             shapeChoice="BIG Oval";
                        else if(xshape  == 6)
                             flagshape = 7;
                             shapeChoice="small rectangle";
                        else if(xshape  == 7)
                     {        flagshape = 8;
                             shapeChoice="small circle";
                        else if(xshape  == 8)
                     {        flagshape = 9;
                             shapeChoice="small oval";
          /*  speedJComboBox = new JComboBox( speed );
               speedJComboBox.setBounds( 10, 150, 135, 21 );
               speedJComboBox.setMaximumRowCount( 3 );
               helpJPanel.add( speedJComboBox );
              speedJComboBox.addActionListener(
                new ActionListener() // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                          int xspeed = speedJComboBox.getSelectedIndex();
                        if( xspeed  == 0)
                             flagspeed = 1;
                             else if(xspeed  == 1)
                             flagspeed = 2;
                             else
                             flagspeed = 3;
                        System.out.println(flagspeed);     
            //creates a newJLabel
            de2JLabel= new JLabel();
            de2JLabel.setBounds( 20, 380, 70, 35 );
            de2JLabel.setText("Details:");
            helpJPanel.add( de2JLabel);
            //creates a JButton
            startTestJButton = new JButton();
            startTestJButton.setBounds( 185, 205, 180, 60 );
            startTestJButton.setText( "START" );
            startTestJButton.setBackground( Color.YELLOW );
            helpJPanel.add( startTestJButton );
            startTestJButton.setEnabled(true);
    //        startTestJButton.setVisible(true);
            startTestJButton.addActionListener(
                new ActionListener() // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                        startTest();
            //sets up an animation panel
            testJPanel = new ShapeMovingPanel(this);
            testJPanel.setBounds( 16,16, 560, 375 );
            testJPanel.setBorder(new TitledBorder("Click the moving object:"));
            testJPanel.setLayout( null );
            testJPanel.setVisible(false);
            contentPane.add( testJPanel );
            testJPanel.addMouseMotionListener(this);
            //creates a newJLabel
            timeJLabel = new JLabel();
            timeJLabel.setBounds( 440, 330, 100, 35 );
            timeJLabel.setText("Time:");
            testJPanel.add( timeJLabel );
            //creates a new JTextField
            timerJTextField = new JTextField();
            timerJTextField.setBounds( 480, 335, 60, 24 );
            timerJTextField.setText(String.valueOf(timeLimit));
            timerJTextField.setHorizontalAlignment(JTextField.CENTER );
            timerJTextField.setEditable(false);
            timerJTextField.setBackground( Color.YELLOW );
            testJPanel.add( timerJTextField );
            resultsJPanel = new JPanel();
            resultsJPanel.setBounds( 16,16, 560, 375 );
            resultsJPanel.setBorder(new TitledBorder("HERE ARE YOUR RESULTS:"));
            resultsJPanel.setLayout( null );
            resultsJPanel.setVisible(false);
            contentPane.add( resultsJPanel );
            de3JLabel= new JLabel();
            de3JLabel.setBounds(20, 200, 530, 35 );
            de3JLabel.setText("Below is also the movements you made with your mouse, " +
                              "you may exit the program now.");
            resultsJPanel.add( de3JLabel);
            de4JLabel= new JLabel();
            de4JLabel.setBounds(135, 245, 530, 35 );
            de4JLabel.setText("Thank you for trying the Reaction Testing program");
            resultsJPanel.add( de4JLabel);
            //creates a newJLabel
            nameResultJLabel= new JLabel();
            nameResultJLabel.setBounds( 62, 55, 50, 35 );
            nameResultJLabel.setText("Name:");
            resultsJPanel.add( nameResultJLabel);
            //creates a new JTextField
            nameResultJTextField = new JTextField();
            nameResultJTextField.setBounds( 140, 55, 300, 24 );
            resultsJPanel.add( nameResultJTextField );
            nameResultJTextField.setEditable(false);
            //creates a newJLabel
            ageResultJLabel = new JLabel();
            ageResultJLabel.setBounds( 62, 90, 100, 35 );
            ageResultJLabel.setText("Age:");
            resultsJPanel.add( ageResultJLabel );
            //creates a new JTextField
            ageResultsJTextField = new JTextField();
            ageResultsJTextField.setBounds( 140, 90, 300, 24 );
            resultsJPanel.add( ageResultsJTextField );
            ageResultsJTextField.setEditable(false);
            //creates a newJLabel
            timeResultsJLabel = new JLabel();
            timeResultsJLabel.setBounds( 62, 125, 100, 35 );
            timeResultsJLabel.setText("Time taken:");
            resultsJPanel.add( timeResultsJLabel );
            //creates a new JTextField
            timeResultsJTextField = new JTextField();
            timeResultsJTextField.setBounds( 140, 125, 300, 24 );
            resultsJPanel.add( timeResultsJTextField );
            timeResultsJTextField.setEditable(false);
            //creates a newJLabel
            ratingJLabel = new JLabel();
            ratingJLabel.setBounds( 62, 160, 100, 35 );
            ratingJLabel.setText("Your Rating:");
            resultsJPanel.add( ratingJLabel );
            ratingJTextField = new JTextField();
            ratingJTextField.setBounds( 140, 160, 300, 24 );
            resultsJPanel.add( ratingJTextField );
            ratingJTextField.setEditable(false);
            //creates a JButton
            exitJButton = new JButton();
            exitJButton.setBounds( 235, 310, 90, 24 );
            exitJButton.setText( "Exit" );
            exitJButton.setBackground( Color.WHITE );
            resultsJPanel.add( exitJButton );
            exitJButton.setEnabled(true);
            exitJButton.addActionListener(
                new ActionListener() // adds an action listener,anonymous inner class
                    // event handler called when exitJButton is pressed
                    public void actionPerformed( ActionEvent event )
                        System.exit(0); //closes the programme
            }); // end anonymous inner class
            addWindowListener(new WindowAdapter()
                public void windowClosing(WindowEvent e)
                    System.exit(0);
            // set properties of application's window
            setTitle( "Reaction Tester - CMT3991" ); // set JFrame's title bar string
            //setSize( 1280,995 );    // set width and height of JFrame
            setSize( 608, 650 );         // set width and height of JFrame
            setVisible( true );       // display JFrame on screen
        //** set up of method main */
        public static void main( String[] args )
            RT application = new RT();
            application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        } // end method main
         * action listener for TimeNow Timer
        private class TimerListener implements ActionListener
            public void actionPerformed(ActionEvent event)
                timeLimit ++;          
                if (timeLimit==100)
                     temp++;
                     timeLimit=0;
                timerJTextField.setText(String.valueOf(temp +""+timeDec.format(timeLimit)));
        private void Login()
            try
                name = nameJTextField.getText();
                age = Integer.parseInt(ageJTextField.getText());
                startJPanel.setVisible(false);
                showJPanel.setVisible(false);
                helpJPanel.setVisible(true);
                infoJTextArea.setText("\n    Welcome "+name+" you will soon know how " +
                                      "fast your reactions are.");
            catch (NumberFormatException exception)
                JOptionPane.showMessageDialog(this,
                        "There is either a blank field or a number hasn't been entered",
                        "Input Type error", JOptionPane.ERROR_MESSAGE);
                //shows this is something has been entered wrong
        private void startTest()
            helpJPanel.setVisible(false);
          //  System.out.println(""+ seed.nextInt(shapes.length));
            //shape = shapes[seed.nextInt(shapes.length)];//****************************
            if (flagshape==1)
                 shape = shapes[0];// changed colour here***************************
            else if (flagshape==2)
                 shape = shapes[1];// changed colour here***************************
            else if (flagshape==3)
                 shape = shapes[2];// changed colour here***************************
           else if (flagshape==4)
                 shape = shapes[3];// changed colour here***************************
             else if (flagshape==5)
                 shape = shapes[4];// changed colour here***************************
            else if (flagshape==6)
                 shape = shapes[5];// changed colour here***************************
            else if (flagshape==7)
                 shape = shapes[6];// changed colour here***************************
            else if (flagshape==8)
                 shape = shapes[7];// changed colour here***************************
            else if (flagshape==9)
                 shape = shapes[8];// changed colour here***************************
           // shape = shapes[8];
            System.out.println(shape.toString());
            testJPanel.setShape(shape);
            testJPanel.setVisible(true);
            testJPanel.start();
            infoJTextArea.setText("");
            TimeNow.start();
         * called by animation panel after shape is clicked
        public void stop()
            TimeNow.stop();
            movingObject();
         * this will compete with your animation
         * ie, it will slow it down or make it appear jerky
        public void mouseMoved(MouseEvent e)
            saySomething("\n    Mouse moved", e);
        public void mouseDragged(MouseEvent e)
            saySomething("\n    Mouse dragged", e);
        void saySomething(String eventDescription, MouseEvent e)
            infoJTextArea.append(eventDescription
                         + " (" + e.getX() + "," + e.getY() + ")");
            infoJTextArea.setCaretPosition(infoJTextArea.getDocument().getLength());
        private void movingObject()
            TimeNow.stop();
            //timeLimit;
            testJPanel.setVisible(false);
            resultsJPanel.setVisible(true);
            nameResultJTextField.setText(name);
            ageResultsJTextField.setText(String.valueOf(age)+" years old");
    System.out.println("shape used: "+shapeChoice);
            String mouse = infoJTextArea.getText();
            String tick = timerJTextField.getText();
            timeResultsJTextField.setText(tick);
            try
                // create a file called welch.txt
                final FileWriter outputFile = new FileWriter("Backup_of_"+name+"s_results.txt", true);
                final BufferedWriter outputBuffer = new BufferedWriter(outputFile);
                // converts data to a formatted string
                final PrintWriter printstream = new PrintWriter(outputBuffer);
                printstream.println("THIS IS A BACKUP");
                printstream.println("The person's name is: "+name);
                printstream.println("There age is: "+age);
                printstream.println("Time taken: "+tick+" seconds");
                printstream.println("The Shape and size was: "+shapeChoice);
                printstream.println("It's colour was: "+colourChoice);
                printstream.println("The mouse moved as follows: "+mouse);
                //states what needs to be printed to the new file
                printstream.close(); // closes teh printstream
            catch(IOException eio)
                //catchs the IO exception
            if(temp<5.00)
                ratingJTextField.setText("Thierry Henry");     
            else if(timeLimit<=10)
                ratingJTextField.setText("Average");     
            else if(timeLimit<=15)
                ratingJTextField.setText("You gotta be fat or something");     
            else if(timeLimit<=20)
                ratingJTextField.setText("See a doctor");
            else if(timeLimit>20)
                ratingJTextField.setText("DO YOU KNOW WHAT YOU DOING!?");
            String rate=ratingJTextField.getText();
            try
                   Statement st = dbcon.createStatement();
                   String cmd = "INSERT INTO users (Name, Age, Time_Taken, Rating, Mouse_Movement,Shape_and_Size, Shape_Colour) VALUES ('" + name + "' , " + age + " , '" + tick + "' , '" + rate+"','"+ mouse+"','"+ shapeChoice+"','"+ colourChoice+"');";
                //creates a SQL statement and executes it
                st.executeUpdate(cmd);
                   st.close();//close the statement
              } catch (Exception eDA)
                   eDA.printStackTrace();
        private void showData()
            // pretend this takes awhile -> 3 seconds (count)
            new Thread(new Runnable()
                public void run()
                    String results = "";
                    int count = 0;
                    boolean journeyOn = true;
                    while(journeyOn && count < 3)
                        try
                            Thread.sleep(1000);
                        catch(InterruptedException ie)
                            System.err.println("show interrupt: " + ie.getMessage());
                            journeyOn = false;
                        results += count++ + ", ";
                    infoJTextArea.setText("Here are your results:\n"+results);
                    startJPanel.setVisible(false);
                    showJPanel.setVisible(true);
            }).start();
    class ShapeMovingPanel extends JPanel implements ActionListener
        RT host;
        Timer timer;
        Shape shape, xformed;
        int x, y, dx, dy;
        public ShapeMovingPanel(RT rt)
            timer = new Timer(-20, this);     
            host = rt;
        /*    if (rt.flagspeed==1)
            timer = new Timer(-20, this);
            else if (rt.flagspeed==2)
                timer = new Timer(20, this);
            else if (rt.flagspeed==3)
            timer = new Timer(100, this);
            //change speed here******************************
            x = 0;//0
            y = 0;//0
            dx =2;//2
            dy = 3;//3
            //setBackground(Color.pink);
            addMouseListener(new ShapeTender());
        public void actionPerformed(ActionEvent e)
            int w = getWidth();
            int h = getHeight();
            if(w <= 0 || h <= 0)
                return;
            checkBoundries(w,h);
            x += dx;
            y += dy;
            repaint();
        private void checkBoundries(int w, int h)
            Rectangle r = xformed.getBounds();
            Insets insets = getInsets();
            if(r.x + dx < insets.left || r.x + r.width + dx > w - insets.right)
                dx *= -1;
            if(r.y + dy < insets.top || r.y + r.height + dy > h - insets.bottom)
                dy *= -1;
        protected void paintComponent(Graphics g)
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
            AffineTransform at = AffineTransform.getTranslateInstance(x, y);
            if (RT.flag==1)
            {g2.setPaint(Color.red);// changed colour here***************************
            else if (RT.flag==2)
            {g2.setPaint(Color.blue);// changed colour here***************************
            else if (RT.flag==3)
            {g2.setPaint(Color.green);// changed colour here***************************
            else if (RT.flag==4)
            {g2.setPaint(Color.yellow);// changed colour here***************************
            else if (RT.flag==5)
            {g2.setPaint(Color.orange);// changed colour here***************************
            else if (RT.flag==6)
            {g2.setPaint(Color.black);// changed colour here***************************
            xfo                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

    I'm (being lazy and) using the older RT app posted on your last thread. I removed the
    TimeNow timer from the RT class and used System.currentTimeMillis (as you requested) to
    determine the elapsed time during the animation (see "startTest", "stop" and
    "movingObject" methods). Also changed the DecimalFormat to NumberFormat and set the
    "maximumFractionDigits" to "2" so it will truncate the fraction to two digits (more simple
    than before). Made arrangements for the ShapeMovingPanel class to update the
    "timerJTextField" during the animation (RT.updateTime method).
    The MouseMotionListener is causing the animation to appear jerky and uneven. The
    "mouseMoved" method is very busy while the mouse is moving. You might consider recording
    the "mousePressed" events instead of the "mouseMoved" events, ie, the events where the user
    is attempting to click inside the moving shape. It would allow the app to be more
    responsive and might eliminate the uneven motion of the animating shape.
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.io.*;
    import java.text.*;
    import java.util.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import javax.swing.event.*;
    import javax.swing.Timer;
    public class RT extends JFrame implements MouseMotionListener
        //declares a number of swing componets to be used for the JFrame
        private JTextArea infoJTextArea;
        private JPanel showJPanel, startJPanel, helpJPanel, resultsJPanel;
        private JLabel de4JLabel, de3JLabel, mainTitleJLabel, nameJLabel, ageJLabel,
                       deJLabel, de1JLabel, de2JLabel, timeJLabel,nameResultJLabel,
                       ageResultJLabel, timeResultsJLabel, ratingJLabel;
        private JTextField nameJTextField, ageJTextField,nameResultJTextField,
                       ageResultsJTextField, timeResultsJTextField, ratingJTextField;
        private JButton exitJButton, showJButton, loginJButton, startTestJButton,
                        tempObjectJButton;
        private JScrollPane scroll;;
        // creates and sets up a number of varibles to be used by the class
        private long startTime;
        private long endTime;
        public int timeLimit = 0;
        public int age;
        public String name;
        private JTextField timerJTextField;
        ShapeMovingPanel testJPanel;
        NumberFormat timeDec;
        Random seed;
        Shape shape;
        Shape[] shapes = {
            new Rectangle2D.Double(50, 30, 75, 25),
            new Ellipse2D.Double(175, 125, 50, 50),
            new Ellipse2D.Double(90, 100, 75, 35)
        public RT()
            timeDec = NumberFormat.getInstance();
            timeDec.setMaximumFractionDigits(2);
            seed = new Random();
            shape = shapes[0];
            createUserInterface();
        private void createUserInterface()
            Container contentPane = getContentPane();
            contentPane.setLayout( null );
            // set up infoJTextField
            infoJTextArea = new JTextArea();
            infoJTextArea.setBounds( 20, 420, 550, 170  );
            infoJTextArea.setEditable( false);
            infoJTextArea.setText("\n    Welcome to the reaction testing program, this " +
                            "program is designed to test your reactions in a  \n"+
                            "    number of different situations.\n"+"\n    Please " +
                            "enter your name and age, or select show previous results.");
            contentPane.add( infoJTextArea );
            scroll = new JScrollPane(infoJTextArea);
            scroll.setBounds(  20, 420, 550, 170 );
            contentPane.add( scroll );
              startJPanel = new JPanel();
            startJPanel.setBounds( 16,16, 560, 375 );
            startJPanel.setBorder(
                    new TitledBorder( "WELCOME -PLEASE ENTER YOUR NAME AND AGE:" ) );
            startJPanel.setLayout( null );
            contentPane.add( startJPanel );
            //sets up a JPanel
            mainTitleJLabel = new JLabel();
            mainTitleJLabel.setIcon( new ImageIcon( "title.png" ) );
            mainTitleJLabel.setBounds( 30, 10, 520, 170 );
            mainTitleJLabel.setHorizontalAlignment( JLabel.CENTER );
            startJPanel.add( mainTitleJLabel );
            //creates a newJLabel
            nameJLabel= new JLabel();
            nameJLabel.setBounds( 52, 200, 70, 35 );
            nameJLabel.setText("Name:");
            startJPanel.add( nameJLabel);
            //creates a new JTextField
            nameJTextField = new JTextField();
            nameJTextField.setBounds( 130, 200, 300, 24 );
            startJPanel.add( nameJTextField );
            //creates a newJLabel
            ageJLabel = new JLabel();
            ageJLabel.setBounds( 52, 245, 100, 35 );
            ageJLabel.setText("Age:");
            startJPanel.add( ageJLabel );
            //creates a new JTextField
            ageJTextField = new JTextField();
            ageJTextField.setBounds( 130, 245, 300, 24 );
            startJPanel.add( ageJTextField );
            //creates a JButton
            loginJButton = new JButton();
            loginJButton.setBounds( 440, 200, 90, 24 );
            loginJButton.setText( "Login" );
            loginJButton.setBackground( Color.YELLOW );
            startJPanel.add( loginJButton );
            loginJButton.setEnabled(true);
            loginJButton.addActionListener(
                new ActionListener()    // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                        // not necessary to pass events to these methods...
                        Login();  // calls the Login method                       
            //creates a JButton
            showJButton = new JButton();
            showJButton.setBounds( 200, 320, 180, 24 );
            showJButton.setText( "Show previous results" );
            showJButton.setBackground( Color.YELLOW );
            startJPanel.add( showJButton );
            showJButton.setEnabled(true);
            showJButton.addActionListener(
                new ActionListener()    // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                        showData();   // calls the showData method                       
            //sets up a JPanel
            showJPanel = new JPanel();
            showJPanel.setBounds( 16,16, 560, 375 );
            showJPanel.setBorder(new TitledBorder( "PREVIOUS RESULTS:" ) );
            showJPanel.setLayout( null );
            contentPane.add( showJPanel );
            //sets up a JPanel
            helpJPanel = new JPanel();
            helpJPanel.setBounds( 16,16, 560, 375 );
            helpJPanel.setBorder(
            new TitledBorder( "HELP DETAILS:" ) );
            helpJPanel.setLayout( null );
            helpJPanel.setVisible(false);
            contentPane.add( helpJPanel );
            //creates a newJLabel
            deJLabel= new JLabel();
            deJLabel.setBounds( 23, 390, 530, 35 );
            deJLabel.setText("Details:");
            contentPane.add( deJLabel);
            //creates a newJLabel
            de1JLabel= new JLabel();
            de1JLabel.setBounds( 25, 100, 530, 35 );
            de1JLabel.setText("You are about to start the reaction test, when you " +
                              "press the start button it will begin.");
            helpJPanel.add( de1JLabel);
            //creates a newJLabel
            de1JLabel= new JLabel();
            de1JLabel.setBounds(160, 145, 530, 35 );
            de1JLabel.setText("Simply catch the moving item and click.");
            helpJPanel.add( de1JLabel);
            //creates a newJLabel
            de2JLabel= new JLabel();
            de2JLabel.setBounds( 20, 380, 70, 35 );
            de2JLabel.setText("Details:");
            helpJPanel.add( de2JLabel);
            //creates a JButton
            startTestJButton = new JButton();
            startTestJButton.setBounds( 185, 205, 180, 60 );
            startTestJButton.setText( "START" );
            startTestJButton.setBackground( Color.YELLOW );
            helpJPanel.add( startTestJButton );
            startTestJButton.setEnabled(true);
            startTestJButton.addActionListener(
                new ActionListener() // adds an action listener,anonymous inner class
                    // event handler called when search is pressed
                    public void actionPerformed( ActionEvent event )
                        startTest();
            //sets up an animation panel
            testJPanel = new ShapeMovingPanel(this);
            testJPanel.setBounds( 16,16, 560, 375 );
            testJPanel.setBorder(new TitledBorder("Click the moving object:"));
            testJPanel.setLayout( null );
            testJPanel.setVisible(false);
            contentPane.add( testJPanel );
    // this is causing the animation to appear uneven
    // you can try the app with and without this to see
    //        testJPanel.addMouseMotionListener(this);
            //creates a newJLabel
            timeJLabel = new JLabel();
            timeJLabel.setBounds( 440, 330, 100, 35 );
            timeJLabel.setText("Time:");
            testJPanel.add( timeJLabel );
            //creates a new JTextField
            timerJTextField = new JTextField();
            timerJTextField.setBounds( 480, 335, 60, 24 );
            timerJTextField.setText(String.valueOf(timeLimit));
            timerJTextField.setHorizontalAlignment(JTextField.CENTER );
            timerJTextField.setEditable(false);
            timerJTextField.setBackground( Color.YELLOW );
            testJPanel.add( timerJTextField );
            resultsJPanel = new JPanel();
            resultsJPanel.setBounds( 16,16, 560, 375 );
            resultsJPanel.setBorder(new TitledBorder("HERE ARE YOUR RESULTS:"));
            resultsJPanel.setLayout( null );
            resultsJPanel.setVisible(false);
            contentPane.add( resultsJPanel );
            de3JLabel= new JLabel();
            de3JLabel.setBounds(20, 200, 530, 35 );
            de3JLabel.setText("Below is also the movements you made with your mouse, " +
                              "you may exit the program now.");
            resultsJPanel.add( de3JLabel);
            de4JLabel= new JLabel();
            de4JLabel.setBounds(135, 245, 530, 35 );
            de4JLabel.setText("Thank you for trying the Reaction Testing program");
            resultsJPanel.add( de4JLabel);
            //creates a newJLabel
            nameResultJLabel= new JLabel();
            nameResultJLabel.setBounds( 62, 55, 50, 35 );
            nameResultJLabel.setText("Name:");
            resultsJPanel.add( nameResultJLabel);
            //creates a new JTextField
            nameResultJTextField = new JTextField();
            nameResultJTextField.setBounds( 140, 55, 300, 24 );
            resultsJPanel.add( nameResultJTextField );
            nameResultJTextField.setEditable(false);
            //creates a newJLabel
            ageResultJLabel = new JLabel();
            ageResultJLabel.setBounds( 62, 90, 100, 35 );
            ageResultJLabel.setText("Age:");
            resultsJPanel.add( ageResultJLabel );
            //creates a new JTextField
            ageResultsJTextField = new JTextField();
            ageResultsJTextField.setBounds( 140, 90, 300, 24 );
            resultsJPanel.add( ageResultsJTextField );
            ageResultsJTextField.setEditable(false);
            //creates a newJLabel
            timeResultsJLabel = new JLabel();
            timeResultsJLabel.setBounds( 62, 125, 100, 35 );
            timeResultsJLabel.setText("Time taken:");
            resultsJPanel.add( timeResultsJLabel );
            //creates a new JTextField
            timeResultsJTextField = new JTextField();
            timeResultsJTextField.setBounds( 140, 125, 300, 24 );
            resultsJPanel.add( timeResultsJTextField );
            timeResultsJTextField.setEditable(false);
            //creates a newJLabel
            ratingJLabel = new JLabel();
            ratingJLabel.setBounds( 62, 160, 100, 35 );
            ratingJLabel.setText("Your Rating:");
            resultsJPanel.add( ratingJLabel );
            ratingJTextField = new JTextField();
            ratingJTextField.setBounds( 140, 160, 300, 24 );
            resultsJPanel.add( ratingJTextField );
            ratingJTextField.setEditable(false);
            //creates a JButton
            exitJButton = new JButton();
            exitJButton.setBounds( 235, 310, 90, 24 );
            exitJButton.setText( "Exit" );
            exitJButton.setBackground( Color.WHITE );
            resultsJPanel.add( exitJButton );
            exitJButton.setEnabled(true);
            exitJButton.addActionListener(
                new ActionListener() // adds an action listener,anonymous inner class
                    // event handler called when exitJButton is pressed
                    public void actionPerformed( ActionEvent event )
                        System.exit(0); //closes the programme
            }); // end anonymous inner class
            addWindowListener(new WindowAdapter()
                public void windowClosing(WindowEvent e)
                    System.exit(0);
            // set properties of application's window
            setTitle( "Reaction Tester - CMT3991" ); // set JFrame's title bar string
            //setSize( 1280,995 );    // set width and height of JFrame
            setSize( 608, 650 );         // set width and height of JFrame
            setVisible( true );       // display JFrame on screen
        //** set up of method main */
        public static void main( String[] args )
            RT application = new RT();
            application.setDefaultCloseOperation( EXIT_ON_CLOSE );
        } // end method main
        private void Login()
            try
                name = nameJTextField.getText();
                age = Integer.parseInt(ageJTextField.getText());
                startJPanel.setVisible(false);
                showJPanel.setVisible(false);
                helpJPanel.setVisible(true);
                infoJTextArea.setText("\n    Welcome "+name+" you will soon know how " +
                                      "fast your reactions are");
            catch (NumberFormatException exception)
                JOptionPane.showMessageDialog(this,
                        "There is either a blank field or a number hasn't been entered",
                        "Input Type error", JOptionPane.ERROR_MESSAGE);
                //shows this is something has been entered wrong
        private void startTest()
            helpJPanel.setVisible(false);
            shape = shapes[seed.nextInt(shapes.length)];
            testJPanel.setShape(shape);
            testJPanel.setVisible(true);
            testJPanel.start();
            startTime = System.currentTimeMillis();
            infoJTextArea.setText("");
         * called by animation panel after shape is clicked
        public void stop()
            endTime = System.currentTimeMillis();
            movingObject();
         * called by timer actionPerformed in ShapeMovingPanel
        public void updateTime()
            long timeNow = System.currentTimeMillis();
            double elapsed = (timeNow - startTime)/1000.0;
            timerJTextField.setText(timeDec.format(elapsed));
         * this will compete with your animation
         * ie, it will slow it down or make it appear jerky
        public void mouseMoved(MouseEvent e)
            saySomething("\n    Mouse moved", e);
        public void mouseDragged(MouseEvent e)
            saySomething("\n    Mouse dragged", e);
        void saySomething(String eventDescription, MouseEvent e)
            infoJTextArea.append(eventDescription
                         + " (" + e.getX() + "," + e.getY() + ")");
            infoJTextArea.setCaretPosition(infoJTextArea.getDocument().getLength());
        private void movingObject()
            testJPanel.setVisible(false);
            resultsJPanel.setVisible(true);
            nameResultJTextField.setText(name);
            ageResultsJTextField.setText(String.valueOf(age)+" years old");
            double elapsedTime = (endTime - startTime)/1000.0;
            timeLimit = (int)elapsedTime;
            timeResultsJTextField.setText(timeDec.format(elapsedTime)+" seconds");
            String mouse = infoJTextArea.getText();
            String tick = timeDec.format(elapsedTime);
            try
                // create a file called welch.txt
                final FileWriter outputFile = new FileWriter(name+".txt", true);
                final BufferedWriter outputBuffer = new BufferedWriter(outputFile);
                // converts data to a formatted string
                final PrintWriter printstream = new PrintWriter(outputBuffer);
                printstream.println("The person's name is: "+name);
                printstream.println("There age is: "+age);
                printstream.println("Time taken: "+tick+" seconds");
                printstream.println("The mouse moved as follows: "+mouse);
                //states what needs to be printed to the new file
                printstream.close(); // closes teh printstream
            catch(IOException eio)
                //catchs the IO exception
            if(timeLimit<5)
                ratingJTextField.setText("Thierry Henry");     
            if(timeLimit>5)
                ratingJTextField.setText("Average");     
            if(timeLimit>10)
                ratingJTextField.setText("You gotta be fat or something");     
            if(timeLimit>20)
                ratingJTextField.setText("See a doctor");
            String rate=ratingJTextField.getText();
        private void showData()
    //        String results = "";
    //        infoJTextArea.setText("Here are your results:\n"+results);
            startJPanel.setVisible(false);
            showJPanel.setVisible(true);
    class ShapeMovingPanel extends JPanel implements ActionListener
        RT host;
        Timer timer;
        Shape shape, xformed;
        int x, y, dx, dy;
        public ShapeMovingPanel(RT rt)
            host = rt;
            timer = new Timer(25, this);
            x = 0;
            y = 0;
            dx = 2;
            dy = 3;
            setBackground(Color.pink);
            addMouseListener(new ShapeTender());
        public void actionPerformed(ActionEvent e)
            int w = getWidth();
            int h = getHeight();
            if(w <= 0 || h <= 0)
                return;
            checkBoundries(w,h);
            x += dx;
            y += dy;
            repaint();
            // update RT.timerJTextField
            host.updateTime();
        private void checkBoundries(int w, int h)
            Rectangle r = xformed.getBounds();
            Insets insets = getInsets();
            if(r.x + dx < insets.left || r.x + r.width + dx > w - insets.right)
                dx *= -1;
            if(r.y + dy < insets.top || r.y + r.height + dy > h - insets.bottom)
                dy *= -1;
        protected void paintComponent(Graphics g)
            super.paintComponent(g);
            Graphics2D g2 = (Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);
            AffineTransform at = AffineTransform.getTranslateInstance(x, y);
            g2.setPaint(Color.red);
            xformed = at.createTransformedShape(shape);
            g2.draw(xformed);
        public void start()
            if(!timer.isRunning())
                timer.start();
        public void setShape(Shape s)
            shape = s;
            Rectangle r = shape.getBounds();
            x = r.x;
            y = r.y;
            repaint();
        private class ShapeTender extends MouseAdapter
            public void mousePressed(MouseEvent e)
                if(xformed.contains(e.getPoint()))
                    timer.stop();
                    host.stop();
    }

  • I have Firefox 5.0.1, and a theme I want to download says that it works with Firefox 4.0b9pre - 7.0a1, but at the top it says that it is not available for my platform. What do I do?

    I just downloaded Firefox 5.0.1, and one of the themes I want to download and try out says that it works with Firefox 4.0b9pre - 7.0a1. At the top, though, it says that the theme is not available for my platform. It has happened with some other themes as well, but I didn't check what versions they work with. I don't know what this means or what to do about it. The theme is at this link: https://addons.mozilla.org/z/en-US/firefox/addon/bloomind-ft-deepdark-2/

    It says:
    <blockquote>"Bloomind FT DeepDark 2" is a theme that has been created to transform the look of Firefox 4 for <b>Windows</b> users. It has been specially designed for Seven, but rendering is relatively accurate on XP and Linux (<b>I can t test it on MAC</b>, but for those who would like to try it anyway on that platform, <u>you can force download and install it</u>).</blockquote>
    So try to save that file via the right-click context menu.
    *http://kb.mozillazine.org/Themes

  • How to make Adobe Flash Player the default player for .flv, .f4v files?

    I have currently installed from Adobe the following applications:
    Adobe Bridge CS6 (64bit)
    Adobe Bridge CS6
    Adobe Dreamweaver CS6
    Adobe Encore CS6
    Adobe ExtendScript Toolkit CS6
    Adobe Extension Manager CS6
    Adobe Fireworks CS6
    Adobe Flash Professional CS6
    Adobe Illustrator CS6 (64bit)
    Adobe InDesign CS6
    Adobe Media Encoder CS6
    Adobe Photoshop CS6 (64bit)
    Adobe Prelude CS6
    Adobe Premiere Pro CS6
    Adobe SpeedGrade CS6
    Adobe Flash Builder is not installed.
    Adobe Premiere After Effects is not installed.
    I've just downloaded Adobe Flash Player 13, but .flv files and .f4v files are not played by Adobe Flash Player. I've tried to make it default player but i didn't release which file .exe to browse for (by right-clicking and choosing Open with > Choose default program...).

    There's a Flash Player Projector (standalone) in the Flash Professional CS6/Players folder, but it's usually outdated.
    When browsing to an app to use from the Properties window, go there, but... download this one: Windows Flash Player 13 Projector  and replace the Flash Player that's in that folder.
    If you're looking to test Flash files you've authored, then you'll need the Projector, but if you're just looking for a good player for FLV and F4V, then you should use VLC Media Player. http://www.videolan.org/

  • Hello there! i am using Adobe acrobat pro DC and using windows 8.1. Recently I was trying to convert a web page (includes greek letters) into pdf. I noticed that the conversion is not accurate, some words are missing, some are misplaced. Especially greek

    hello there! i am using Adobe acrobat pro DC and using windows 8.1. Recently I was trying to convert a web page (includes Greek letters) into PDF. I noticed that the conversion is not accurate, some words are missing, some are misplaced. Especially Greek words are not accurately converted or even not converted. Please give me some suggestions to improve this issue. Regards

    Hey quantum info,
    Thank you for posting at Adobe forums. We would love to help you out.
    Could you please let me know if you have tried converting other web pages to PDF and checked if the same issue persists.
    How have you been trying to convert the web page to PDF?
    Are you trying to convert to PDF directly via browsers or using "File > Create > PDF from Web Page"  option in Acrobat.
    Let me know more so that I can analyze where actually the issue persists.
    Hope to hear from you.
    Regards,
    Anubha

  • Search results are not accurate

    hi,
    am facing a unique issue in SP 2013. Whenever we search for a search criteria the results returned is not accurate always. Every time we navigate across pages, the search results change which is not
    a desired behavior. However we also noticed that the refiner panel does not change as well and it retains the old count which leads to inconsistent results when user selects a criteria from the refiner.
     any pointers /  helpful links  regarding this issue, if any anyone has surfaced,  is highly appreciated!  
    Das

    Hi,
    According to your post, my understanding is that search results are not accurate.
    I recommend to run a full crawl and then to check whether the search results are correct.
    If your incremental crawl is running, it may happen that, when you are viewing the data in the search result web part, the newly added content are not crawled yet.
    So, after the content are updated, wait for some time.
    Let your incremental crawl finish. Then view the results on the page.
    More information:
    Understanding how search results are displayed in SharePoint Server 2013
    Searching new content with SharePoint Search
    Best Regards,
    Linda Li
    Linda Li
    TechNet Community Support

  • Preloader Not Loading Until The Start of Lesson In Captivate 7

    I created a Scorm 2004 compliant lesson using Captivate 7. The file size is ~7MB. When I load and run the lesson on our LMS I don't see the preloader until 3-4 seconds before the file loads. I'm staring at a blank screen for about 45 seconds before anything happens. I have the preloader set at 10% but I can't get it to work.
    I loaded the file to one of our FTP sites and ran it on an html page and it does the same thing.
    Our customers are asking us why there is no indication that the lesson is loading and all I can say is it's a problem with Captivate 7.
    I upgraded to 7 because I was told the problem was fixed, but it's still bad.
    Any help is appreciated.
    Thanks

    Yes, it's set to look in the Cp7 preloader folder. I found this on a Captivate website and I think it answers the question.
    "As mentioned, preloaders are only really applicable for HTM/SWF output. But what you may not realize is that they will only work if the content is served from a web server over HTTP. Conversely, the preloaders will NOT work if the same content is served up from a LAN server drive over TCP/IP.  This is due to the fact that SWF preloaders need to communicate with the server to calculate and show the percentage of file currently loaded.  This communication works with web servers, but not with LAN servers."
    Unfortunately, Cp7 preloader is going to work on our LMS. I'm going to build a preloader class in Flash and call the Cp7 swf using that.
    Thanks for your help
    Date: Sat, 18 Jan 2014 00:34:37 -0800
    From: [email protected]
    To: [email protected]
    Subject: Preloader Not Loading Until The Start of Lesson In Captivate 7
        Re: Preloader Not Loading Until The Start of Lesson In Captivate 7
        created by RodWard in Adobe Captivate - View the full discussion
    If you still have Captivate 6 on your PC, then make sure that the preloader in this Cp7 project is not pointing at a folder in the Cp6 install directory.  It should be using a Cp7 preloader.
         Please note that the Adobe Forums do not accept email attachments. If you want to embed a screen image in your message please visit the thread in the forum to embed the image at http://forums.adobe.com/message/6026026#6026026
         Replies to this message go to everyone subscribed to this thread, not directly to the person who posted the message. To post a reply, either reply to this email or visit the message page: http://forums.adobe.com/message/6026026#6026026
         To unsubscribe from this thread, please visit the message page at http://forums.adobe.com/message/6026026#6026026. In the Actions box on the right, click the Stop Email Notifications link.
               Start a new discussion in Adobe Captivate at Adobe Community
      For more information about maintaining your forum email notifications please go to http://forums.adobe.com/thread/416458?tstart=0.

  • Struts class not found for war file

    Hello,
    I am tring to deploy my struts web application in weblogic 8.1. I have all the
    library files in web-inf\lib directory. It gave me the error that class not found
    for some class in struts library. The console also told me the classpath. But
    I can use javap to find the class using the same classpath. Could any one point
    me some direction what I am doing wrong here.
    Thanks.
    Here is the error message:
    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/Converter.>
    <Nov 13, 2003 11:05:29 AM EST> <Error> <HTTP> <BEA-101216> <Servlet: "action"
    fa
    iled to preload on startup in Web application: "voppocWebApp".
    javax.servlet.ServletException: [HTTP:101250][ServletContext(id=9921725,name=vop
    pocWebApp,context-path=/voppocWebApp)]: Servlet class org.apache.struts.action.A
    ctionServlet for servlet action could not be loaded because a class on which it
    depends was not found in the classpath C:\bea\weblogic81\server\bin\myserver\upl
    oad\voppocWebApp.war;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extrac
    t\myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\activation30425.jar;C:
    \bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp
    _voppocWebApp\jarfiles\WEB-INF\lib\commons-beanutils30426.jar;C:\bea\weblogic81\
    server\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\ja
    rfiles\WEB-INF\lib\commons-collections30427.jar;C:\bea\weblogic81\server\bin\.\m
    yserver\.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF
    \lib\commons-digester30428.jar;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdel
    ete\extract\myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\commons-file
    upload30429.jar;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\mys
    erver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\commons-lang30430.jar;C:\be
    a\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp_vo
    ppocWebApp\jarfiles\WEB-INF\lib\commons-logging30431.jar;C:\bea\weblogic81\serve
    r\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\jarfile
    s\WEB-INF\lib\commons-validator30432.jar;C:\bea\weblogic81\server\bin\.\myserver
    \.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\ja
    karta-oro30433.jar;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\
    myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\jdbc2_0-stdext30434.jar;
    C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebA
    pp_voppocWebApp\jarfiles\WEB-INF\lib\mailapi30435.jar;C:\bea\weblogic81\server\b
    in\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\jarfiles\W
    EB-INF\lib\struts30436.jar;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\
    extract\myserver_voppocWebApp_voppocWebApp\jarfiles\_wl_cls_gen.jar.
    java.lang.NoClassDefFoundError: org/apache/commons/beanutils/Converter.
    at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubI
    mpl.java:800)
    at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppS
    ervletContext.java:3236)
    at weblogic.servlet.internal.WebAppServletContext.preloadServlets(WebApp
    ServletContext.java:3181)

    Hello Mark,
    Your suggested solution (putting an empty commons-logging.properties into
    web-inf/classes or in a jar in web-inf/lib)
    does not make any change at all. It still complains about not being able to
    preload the servlet and still
    gives exceptions upong calling upon LogFactory.
    What I have been able to do is put the three classes from
    com.bea.wlw.netui.util.logging into a separate jar
    and add that to web-inf/lib.
    However I am sometimes getting funny exceptions upon undeploy
    (NoClassDefFoundError for org.apache.commons.collection.FastHashMap$KeySet).
    Regards,
    Robert Varga
    "Mark Griffith" <[email protected]> wrote in message
    news:[email protected]...
    From a FAQ on netui:
    1. Why do I get a ServletException while trying to deploy a struts web
    application on a Workshop/Integration/Portal domain?
    In the "<WL-HOME>/server/lib/knex.jar" file there is a properties file
    called "commons-logging.properties" which configures the
    com.bea.wlw.netui.util.logging.StrutsLogFactory class for Struts loggingas
    below:
    org.apache.commons.logging.LogFactory=com.bea.wlw.netui.util.logging.StrutsL
    ogFactory
    This class file is not available for a Struts web application that was not
    built using Workshop, the reason being the containing NetUI jar files are
    not present in the web application's WEB-INF/lib folder. This leads to a
    ServletException while deploying the web application. The solution is toadd
    a blank file (or a JAR containing the file) namedcommons-logging.properties
    to the server CLASSPATH, or to the WEB-INF/lib folder of the concerned web
    application. This issue will be fixed in Service Pack 2.
    cheers
    mbg
    "Robert Varga" <[email protected]> wrote in message
    news:[email protected]...
    Hi Rob,
    I also have a similar error with deploying a Struts web application into
    a
    8.1 Basic Workshop Domain created
    by 8.1 Platform.
    I get a ClassNotFoundException for 'com.wlw...StrutsLogFactory', whenStruts
    tries to load any Jakarta class
    from commons-beanutils or Struts which has logging.
    This happens because commons-logging picks up some property whichinstructs
    it to load that class, which is
    naturally not included in most web applications, since it is
    workshop-specific. This property definition, I think,
    is in <bea>\weblogic81\server\knex.jar, called
    commons-logging.properties,
    containing the following line:
    org.apache.commons.logging.LogFactory=com.bea.wlw.netui.util.logging.StrutsL
    ogFactory
    How can I override this in my webapp in a property file, so that when a
    Struts or Beanutils class calls
    LogFactory.getLog(org.apache.....<classname>.class), it would not try touse
    the property file and the
    class defined in knex.jar.
    Thanks in advance,
    Robert Varga
    "Rob Woollen" <[email protected]> wrote in message
    news:[email protected]...
    Actually it complained about a NoClassDefFoundError. Generally this
    is
    caused by something in a parent classloader that is found but then
    depends on something only loadable in a child classloader.
    eg.
    You have something in your $CLASSPATH that references something in the
    WEB-INF/lib. This will NoClassDefFoundError.
    So, as I recommended, remove everything you've added to the$CLASSPATH,
    add the jars to WEB-INF/lib. If you're still having problems, show me
    your $CLASSPATH, the contents of WEB-INF/lib, and the error message
    /stack trace.
    -- Rob
    yuruo chen wrote:
    Hello, Rob,
    I did put the common-beanutils and other jar files in the
    web-inf/lib
    directory.
    And from the weblogic console, I do see the jar file get included in
    the
    classpath.
    (those generated file name have some number attached at the end.)
    As
    I
    mentioned
    before, I can use javap find the class using this weblogic generatedclasspath.
    But weblogic complained that the class is not found.
    Rob Woollen <[email protected]> wrote:
    Remove anything you've added to the server's classpath.
    Add the required jar files to WEB-INF/lib
    -- Rob
    yuruo chen wrote:
    Hello,
    I am tring to deploy my struts web application in weblogic 8.1. I
    have
    all the
    library files in web-inf\lib directory. It gave me the error that
    class
    not found
    for some class in struts library. The console also told me the
    classpath.
    But
    I can use javap to find the class using the same classpath. Could
    any
    >>>>>
    one point
    me some direction what I am doing wrong here.
    Thanks.
    Here is the error message:
    java.lang.NoClassDefFoundError:
    org/apache/commons/beanutils/Converter.>
    <Nov 13, 2003 11:05:29 AM EST> <Error> <HTTP> <BEA-101216>
    <Servlet:
    >>>>>
    "action"
    fa
    iled to preload on startup in Web application: "voppocWebApp".
    javax.servlet.ServletException:
    [HTTP:101250][ServletContext(id=9921725,name=vop
    pocWebApp,context-path=/voppocWebApp)]: Servlet classorg.apache.struts.action.A
    ctionServlet for servlet action could not be loaded because a classon which it
    depends was not found in the classpath
    C:\bea\weblogic81\server\bin\myserver\upl
    >
    oad\voppocWebApp.war;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extrac
    >
    t\myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\activation30425.jar;C:
    >
    \bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp
    >
    _voppocWebApp\jarfiles\WEB-INF\lib\commons-beanutils30426.jar;C:\bea\weblogic81\
    >
    server\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\ja
    >
    rfiles\WEB-INF\lib\commons-collections30427.jar;C:\bea\weblogic81\server\bin\.\m
    >
    yserver\.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF
    >
    \lib\commons-digester30428.jar;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdel
    >
    ete\extract\myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\commons-file
    >
    upload30429.jar;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\mys
    >
    erver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\commons-lang30430.jar;C:\be
    >
    a\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp_vo
    >
    ppocWebApp\jarfiles\WEB-INF\lib\commons-logging30431.jar;C:\bea\weblogic81\serve
    >
    r\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\jarfile
    >
    s\WEB-INF\lib\commons-validator30432.jar;C:\bea\weblogic81\server\bin\.\myserver
    >
    \.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\ja
    >
    karta-oro30433.jar;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\
    >
    myserver_voppocWebApp_voppocWebApp\jarfiles\WEB-INF\lib\jdbc2_0-stdext30434.jar;
    >
    C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\extract\myserver_voppocWebA
    >
    pp_voppocWebApp\jarfiles\WEB-INF\lib\mailapi30435.jar;C:\bea\weblogic81\server\b
    >
    in\.\myserver\.wlnotdelete\extract\myserver_voppocWebApp_voppocWebApp\jarfiles\W
    >
    EB-INF\lib\struts30436.jar;C:\bea\weblogic81\server\bin\.\myserver\.wlnotdelete\
    extract\myserver_voppocWebApp_voppocWebApp\jarfiles\_wl_cls_gen.jar.
    java.lang.NoClassDefFoundError:
    org/apache/commons/beanutils/Converter.
    atweblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubI
    mpl.java:800)
    atweblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppS
    ervletContext.java:3236)
    atweblogic.servlet.internal.WebAppServletContext.preloadServlets(WebApp
    ServletContext.java:3181)

  • File.exists() is not accurate on smb2 network share (use WatchService?)

    Hi,
    According to this document: SMB2 Client Redirector Caches Explained File.exists() is not accurate on a smb2 network share. I am not able to change any register settings, so I want to deal with it. According to the document there is an API to get the notifications from the file system. I assumed that the WatchService is the Java implementation of this API. Am I correct?
    I started with the WatchDir example from the jdk samples and stripped it a bit. I only need to know when a file is created and delete (I don't care about file modifications). For testing I have added new File.exists() when a new event has been triggered. I also start a separated Thread which test the file existence also. When I don't start this separated thread the file exists returns true immediately. When the extra thread is started it is not accurate any more. I need a more accurate file.exists check in the whole application and all running threads.
    The output for my test case is this:
    FileExistsThread: subdir\test.txt == false
    watch registered for dir: subdir\
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    WatchDir event: ENTRY_CREATE: test.txt
    WatchDir: subdir\test.txt exists == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == false
    FileExistsThread: subdir\test.txt == true
    FileExistsThread: subdir\test.txt == true
    FileExistsThread: subdir\test.txt == true
    FileExistsThread: subdir\test.txt == true
    As you can see the file test.txt  is created on line 9. The FileExistsThread have seen it on line 20, (at least 10 x 300 ms later).
    For testing I have used 2 Windows 7 pc's (with smb2 enabled which is default). The working directory must be on the remote pc and the file test.txt must be created (or copied from another folder) on the remote pc (not using the network drive, but on the pc itself).
    Here is my test code:
    package nl.test.main;
    import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
    import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
    import static java.nio.file.StandardWatchEventKinds.OVERFLOW;
    import java.io.File;
    import java.io.IOException;
    import java.nio.file.ClosedWatchServiceException;
    import java.nio.file.FileSystems;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.nio.file.WatchEvent;
    import java.nio.file.WatchKey;
    import java.nio.file.WatchService;
    public class WatchDir
      private final WatchService _watcher;
      private final String _dir;
      public WatchDir( String dir ) throws IOException
        _dir = dir;
        _watcher = FileSystems.getDefault().newWatchService();
        Paths.get( dir ).register( _watcher, ENTRY_CREATE, ENTRY_DELETE );
        System.out.println( "watch registered for dir: " + dir );
      public void run()
        try
          while ( true )
            WatchKey key = _watcher.take();
            for ( WatchEvent<?> event : key.pollEvents() )
              WatchEvent.Kind<?> kind = event.kind();
              if ( kind == OVERFLOW )
                continue;
              @SuppressWarnings( "unchecked" )
              WatchEvent<Path> ev = (WatchEvent<Path>)event;
              Path fileName = ev.context();
              System.out.println( "WatchDir event: " + kind.name() + ": " + fileName );
              if ( kind == ENTRY_CREATE )
                String realPath = _dir + fileName;
                System.out.println( "WatchDir: " + realPath + " exists == " + new File( realPath ).exists() );
            key.reset();
        catch ( ClosedWatchServiceException x )
          return;
        catch ( InterruptedException ex )
          return;
      public static void main( String[] args )
        Thread t = new Thread( new Runnable()
          @Override
          public void run()
            try
              while ( true )
                String filename = "subdir\\test.txt";
                boolean fileExists = new File( filename ).exists();
                System.err.println( "FileExistsThread: " + filename + " == " + fileExists );
                Thread.sleep( 300 );
            catch ( InterruptedException e )
              e.printStackTrace();
              return;
        t.start();
        try
          new WatchDir( "subdir\\" ).run();
        catch ( IOException e )
          e.printStackTrace();
    Any idea's?
    Thanks,
    Olaf

    If you donot have access to note 45172.1 as specified by Laurent Schneider.
    Snippet from note
    a. Mapped Drive : To use a mapped drive, the user that the service starts as
    must have setup a drive to match UTL_FILE_DIR and be logged onto the server
    when UTL_FILE is in use.
    b. Universal Naming Convention : UNC is preferable to Mapped Drives because
    it does not require anyone to be logged on and UTL_FILE_DIR should be set to
    a name in the form :
    \\\<machine name>\<share name>\<path>
    or
    "\\<machine name>\<share name>\<path>"

Maybe you are looking for