0

I have a program that looks into a single Notepad file which contains information similar to:

Cardiff : 3245658

Bristol : 4726485

Manchester : 4728945

These places and numbers are coming out of a automatic system, and the numbers change every 20 seconds or so. I need to create a loop(I'm guessing) so that when the numbers change, my program will look back into the notepad file and update the number in the JTextField

P.s I have already created the program so that it looks into the file, gets the information needs and puts it in the correct place, using an ArrayList,

All I need help with is how to make the code automatically update when there is a change in the file, and I need to do this without using any sort of Jbuttons, it just needs to do it by itself.

My whole code as it stands:

package window;

import java.awt.Color;
import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class MapTest {

    private JFrame frame;
    static JTextField txtCardiff;
    static JTextField txtBristol;
    static JTextField txtSheffield;
    static JTextField txtDerby;
    static JTextField txtGlasgow;
    static JTextField txtFalkirk;
    static JTextField txtNewcastle;
    static JTextField txtLeeds;
    static JTextField txtPreston;
    static JTextField txtManchester;
    static JTextField txtWolverhampton;
    static JTextField txtBirmingham;
    static JTextField txtMiltonKeynes;
    static JTextField txtPeterborough;
    static JTextField txtColindale;
    static JTextField txtStepneyGreen;
    static JTextField txtSlough;
    static JTextField txtFaraday;
    static JTextField txtGuildford;
    static JTextField txtSouthbank;

    static BufferedReader CSVFile = new BufferedReader(new FileReader
        ("C:/Users/606854007/workspace/NetworkAppTest/jar/window/Cardiff.txt"));
// putting static infront of this Br ' CSVFile' gives: 
//Unhandled exception type FileNotFoundException. 
//but when i take away the 'static' it causes a problem in the 'FileCheckerWorker' class.
// (Will comment where and what)

    ArrayList<String> csv = new ArrayList<String>();

    /**
    private String output = "";
    private String output1 = "";
    private String output2 = "";
    private String output3 = "";
    private String output4 = "";
    private String output5 = "";
    private String output6 = "";
    private String output7 = "";
    private String output8 = "";
    private String output9 = "";
    private String output10 = "";
    private String output11 = "";
    private String output12 = "";
    private String output13 = "";
    private String output14 = "";
    private String output15 = "";
    private String output16 = "";
    private String output17 = "";
    private String output18 = "";
    private String output19 = "";
    **/
    /** * Launch the application. */
    public static void main(String[] args) {
         try {
                UIManager.setLookAndFeel(
                            UIManager.getSystemLookAndFeelClassName());

            } catch (ClassNotFoundException e1) {
                e1.printStackTrace();

            } catch (InstantiationException e1) {
                e1.printStackTrace();

            } catch (IllegalAccessException e1) {
                e1.printStackTrace();

            } catch (UnsupportedLookAndFeelException e1) {
                e1.printStackTrace();
            }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MapTest window = new MapTest();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

    /**
     * Create the application.
     * 
     * @throws IOException
     */
    public MapTest() throws IOException {
        try {
            initialize();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * Initialise the contents of the frame.
     * 
     * @param output
     * @throws IOException
     */

    private void initialize() throws IOException {

                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());
                csv.add(CSVFile.readLine());

                System.out.println(csv.get(0));
                System.out.println(csv.get(1));
                System.out.println(csv.get(2));
                System.out.println(csv.get(3));
                System.out.println(csv.get(4));
                System.out.println(csv.get(5));
                System.out.println(csv.get(6));
                System.out.println(csv.get(7));
                System.out.println(csv.get(8));
                System.out.println(csv.get(9));
                System.out.println(csv.get(10));
                System.out.println(csv.get(11));
                System.out.println(csv.get(12));
                System.out.println(csv.get(13));
                System.out.println(csv.get(14));
                System.out.println(csv.get(15));
                System.out.println(csv.get(16));
                System.out.println(csv.get(17));
                System.out.println(csv.get(18));
                System.out.println(csv.get(19));


        /**
         * JPanel container = new JPanel(); container.add(txtBirmingham);
         * container.add(txtBristol); container.add(txtCardiff);
         * container.add(txtColindale); container.add(txtDerby);
         * container.add(txtFalkirk); container.add(txtGlasgow);
         * container.add(txtGuildford); container.add(txtLeeds);
         * container.add(txtManchester); container.add(txtMiltonKeynes);
         * container.add(txtNewcastle); container.add(txtPeterborough);
         * container.add(txtPreston); container.add(txtSheffield);
         * container.add(txtSlough); container.add(txtSouthbank);
         * container.add(txtStepneyGreen); container.add(txtWolverhampton);
         * //container.add(); JScrollPane jsp = new JScrollPane(container);
         * frame.add(jsp);
         **/

        frame = new JFrame();
        frame.setBounds(0, 0, 1000, 1086);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        frame.setBackground(Color.CYAN);

        txtCardiff = new JTextField();
        txtCardiff.setText(csv.get(0));
        txtCardiff.setBackground(Color.GREEN);
        txtCardiff.setBounds(305, 699, 102, 20);
        frame.getContentPane().add(txtCardiff);
        txtCardiff.setColumns(10);

        txtBristol = new JTextField();
        txtBristol.setText(csv.get(1));
        txtBristol.setBackground(Color.GREEN);
        txtBristol.setBounds(416, 780, 102, 20);
        frame.getContentPane().add(txtBristol);
        txtBristol.setColumns(10);

        txtSheffield = new JTextField();
        txtSheffield.setText(csv.get(2));
        txtSheffield.setBackground(Color.GREEN);
        txtSheffield.setBounds(517, 356, 110, 20);
        frame.getContentPane().add(txtSheffield);
        txtSheffield.setColumns(10);

        txtDerby = new JTextField();
        txtDerby.setText(csv.get(3));
        txtDerby.setBackground(Color.GREEN);
        txtDerby.setBounds(582, 451, 90, 20);
        frame.getContentPane().add(txtDerby);
        txtDerby.setColumns(10);

        txtGlasgow = new JTextField();
        txtGlasgow.setText(csv.get(4));
        txtGlasgow.setBackground(Color.GREEN);
        txtGlasgow.setBounds(250, 94, 102, 20);
        frame.getContentPane().add(txtGlasgow);
        txtGlasgow.setColumns(10);

        txtFalkirk = new JTextField();
        txtFalkirk.setText(csv.get(5));
        txtFalkirk.setColumns(10);
        txtFalkirk.setBackground(Color.GREEN);
        txtFalkirk.setBounds(331, 41, 102, 20);
        frame.getContentPane().add(txtFalkirk);

        txtNewcastle = new JTextField();
        txtNewcastle.setText(csv.get(6));
        txtNewcastle.setColumns(10);
        txtNewcastle.setBackground(Color.GREEN);
        txtNewcastle.setBounds(424, 141, 111, 20);
        frame.getContentPane().add(txtNewcastle);

        txtLeeds = new JTextField();
        txtLeeds.setText(csv.get(7));
        txtLeeds.setColumns(10);
        txtLeeds.setBackground(Color.GREEN);
        txtLeeds.setBounds(481, 244, 102, 20);
        frame.getContentPane().add(txtLeeds);

        txtPreston = new JTextField();
        txtPreston.setText(csv.get(8));
        txtPreston.setColumns(10);
        txtPreston.setBackground(Color.GREEN);
        txtPreston.setBounds(356, 221, 102, 20);
        frame.getContentPane().add(txtPreston);

        txtManchester = new JTextField();
        txtManchester.setText(csv.get(9));
        txtManchester.setColumns(10);
        txtManchester.setBackground(Color.GREEN);
        txtManchester.setBounds(394, 394, 124, 20);
        frame.getContentPane().add(txtManchester);

        txtWolverhampton = new JTextField();
        txtWolverhampton.setText(csv.get(10));
        txtWolverhampton.setColumns(10);
        txtWolverhampton.setBackground(Color.GREEN);
        txtWolverhampton.setBounds(360, 486, 153, 20);
        frame.getContentPane().add(txtWolverhampton);

        txtBirmingham = new JTextField();
        txtBirmingham.setText(csv.get(11));
        txtBirmingham.setColumns(10);
        txtBirmingham.setBackground(Color.GREEN);
        txtBirmingham.setBounds(424, 553, 128, 20);
        frame.getContentPane().add(txtBirmingham);

        txtMiltonKeynes = new JTextField();
        txtMiltonKeynes.setText(csv.get(12));
        txtMiltonKeynes.setColumns(10);
        txtMiltonKeynes.setBackground(Color.GREEN);
        txtMiltonKeynes.setBounds(474, 604, 135, 20);
        frame.getContentPane().add(txtMiltonKeynes);

        txtPeterborough = new JTextField();
        txtPeterborough.setText(csv.get(13));
        txtPeterborough.setColumns(10);
        txtPeterborough.setBackground(Color.GREEN);
        txtPeterborough.setBounds(655, 576, 135, 20);
        frame.getContentPane().add(txtPeterborough);

        txtColindale = new JTextField();
        txtColindale.setText(csv.get(14));
        txtColindale.setColumns(10);
        txtColindale.setBackground(Color.GREEN);
        txtColindale.setBounds(541, 699, 107, 20);
        frame.getContentPane().add(txtColindale);

        txtStepneyGreen = new JTextField();
        txtStepneyGreen.setText(csv.get(15));
        txtStepneyGreen.setColumns(10);
        txtStepneyGreen.setBackground(Color.GREEN);
        txtStepneyGreen.setBounds(667, 699, 137, 20);
        frame.getContentPane().add(txtStepneyGreen);

        txtSlough = new JTextField();
        txtSlough.setText(csv.get(16));
        txtSlough.setColumns(10);
        txtSlough.setBackground(Color.GREEN);
        txtSlough.setBounds(525, 756, 102, 20);
        frame.getContentPane().add(txtSlough);

        txtFaraday = new JTextField();
        txtFaraday.setText(csv.get(17));
        txtFaraday.setColumns(10);
        txtFaraday.setBackground(Color.GREEN);
        txtFaraday.setBounds(650, 756, 102, 20);
        frame.getContentPane().add(txtFaraday);

        txtGuildford = new JTextField();
        txtGuildford.setText(csv.get(18));
        txtGuildford.setColumns(10);
        txtGuildford.setBackground(Color.GREEN);
        txtGuildford.setBounds(525, 822, 102, 20);
        frame.getContentPane().add(txtGuildford);

        txtSouthbank = new JTextField();
        txtSouthbank.setText(csv.get(19));
        txtSouthbank.setColumns(10);
        txtSouthbank.setBackground(Color.GREEN);
        txtSouthbank.setBounds(655, 807, 115, 20);
        frame.getContentPane().add(txtSouthbank);

        JLabel lblNewLabel = new JLabel("New label");
        lblNewLabel.setForeground(Color.BLACK);
        lblNewLabel.setBackground(Color.BLACK);
        lblNewLabel
                .setIcon(new ImageIcon(
                        "C:\\Users\\606854007\\workspace\\NetworkAppTest\\Test\\window\\England_Wales.gif"));
        lblNewLabel.setBounds(33, 11, 890, 1086);
        frame.getContentPane().add(lblNewLabel);

        new FileCheckerWorker(null).execute();
\\ if i dont but null in the '()' then it comes up with an error, 
\\and this just makes it execute:
    /**
public FileCheckerWorker(MapTest mapTest) {
        this.mapTest = mapTest;
    }
**/
\\ which is not what I want, I have tried to add commands 
\\to run the methods from within:
\\ ' public FileCheckerWorker(MapTest mapTest)' method
\\ but it gives me a null pointer exception,


}

    }

Below is the 'FileCheckerWorker' class hoping I've done it right :p

package window;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import javax.swing.SwingWorker;


public class FileCheckerWorker extends SwingWorker<Object, List<String>> {

    private MapTest mapTest;

    public FileCheckerWorker(MapTest mapTest) {
        this.mapTest = mapTest;
    }


        @Override
        protected void process(List<List<String>> chunks) {
           List<String> values = chunks.get(chunks.size() - 1);

           mapTest.txtCardiff.setText(values.get(0));
           mapTest.txtBristol.setText(values.get(1));
           mapTest.txtSheffield.setText(values.get(2));
           mapTest.txtDerby.setText(values.get(3));
           mapTest.txtGlasgow.setText(values.get(4));
           mapTest.txtFalkirk.setText(values.get(5));
           mapTest.txtNewcastle.setText(values.get(6));
           mapTest.txtLeeds.setText(values.get(7));
           mapTest.txtPreston.setText(values.get(8));
           mapTest.txtManchester.setText(values.get(9));
           mapTest.txtWolverhampton.setText(values.get(10));
           mapTest.txtBirmingham.setText(values.get(11));
           mapTest.txtMiltonKeynes.setText(values.get(12));
           mapTest.txtPeterborough.setText(values.get(13));
           mapTest.txtColindale.setText(values.get(14));
           mapTest.txtStepneyGreen.setText(values.get(15));
           mapTest.txtSlough.setText(values.get(16));
           mapTest.txtFaraday.setText(values.get(17));
           mapTest.txtGuildford.setText(values.get(18));
           mapTest.txtSouthbank.setText(values.get(19));
        }

        @Override
        protected Object doInBackground() throws Exception {
            long lastUpdated = -1;
            File csvFile = new File("C:/Users/606854007/workspace/NetworkAppTest/Jar/window/Cardiff.txt");
            while (true) {
                if (csvFile.lastModified() != lastUpdated) {
                    BufferedReader csvReader = null;
                    List<String> values = new ArrayList<String>(20);
                    try {
                        csvReader = new BufferedReader(new FileReader("C:/Users/606854007/workspace/NetworkAppTest/Jar/window/Cardiff.txt"));
                        for (int index = 0; index < 20; index++) {
                            values.add(mapTest.CSVFile.readLine());
                        }
                        publish(values);
                        lastUpdated = csvFile.lastModified();
                    } finally {
                        try {
                            csvReader.close();
                        } catch (Exception e) {
                        }
                    }

                    Thread.sleep(5000);
                    System.out.println("Check For Change");
                }
            }
        }

}

UPDATED Both codes to what they are now.

Also when I thought I had the 'doInBackground' working if gave me a NullPointerException on line values.add(mapTest.CSVFile.readLine());

ROMANIA_engineer
  • 54,432
  • 29
  • 203
  • 199
Wilson
  • 11
  • 2

2 Answers2

1

Take a look at ScheduledExecutorService. Using this you can schedule some periodic tasks. (in your case will be reading from file at every 20 seconds).

niculare
  • 3,629
  • 1
  • 25
  • 39
1

Wrap the "look up" code in a SwingWorker, use Thread.sleep to allow the background thread to idle for a given period (say 20 seconds).

Load the contents of the file, determine if it's changed and use the pusblish method to send the results to the process method, which allows you to process the results withing the Event Dispatching Thread

Take a look at SwingWorker for more details

Simple Example

public class PeriodicalWorker extends SwingWorker<Object, String> {
    private boolean running = true;

    public Object doInBackground() throws Exception {
        while (running) {
            try {
                Thread.sleep(20000);
            } catch (Exception exp) {}
            // Load the values...
            // Check to see if anything needs to updated...
            publish(values); // List of String array values
        }
        return null;
    }

    public void process(List<String> values) {
        // Assign the values to the UI...
    }
}

I'm sure you can a "stop" method to set running to false ;)

Updated

The basic concept is very simple. You need to keep track of the last time the file was updated, if the value changes between sleeps, you need to reread the file and update the values on the screen.

This process has been made considerably easier in Java 7, but before that, you could use File#lastModified to check the last modified date/time of the file.

Below is simple example.

public class FileCheckerWorker extends SwingWorker<Object, List<String>> {

    @Override
    protected void process(List<List<String>> chunks) {
        List<String> values = chunks.get(chunks.size() - 1);

        txtCardiff.setText(values.get(0));
        txtBristol.setText(values.get(1));
        txtSheffield.setText(values.get(2));
        txtDerby.setText(values.get(3));
        txtGlasgow.setText(values.get(4));
        txtFalkirk.setText(values.get(5));
        txtNewcastle.setText(values.get(6));
        txtLeeds.setText(values.get(7));
        txtPreston.setText(values.get(8));
        txtManchester.setText(values.get(9));
        txtWolverhampton.setText(values.get(10));
        txtBirmingham.setText(values.get(11));
        txtMiltonKeynes.setText(values.get(12));
        txtPeterborough.setText(values.get(13));
        txtColindale.setText(values.get(14));
        txtStepneyGreen.setText(values.get(15));
        txtSlough.setText(values.get(16));
        txtFaraday.setText(values.get(17));
        txtGuildford.setText(values.get(18));
        txtSouthbank.setText(values.get(19));
    }

    @Override
    protected Object doInBackground() throws Exception {
        long lastUpdated = -1;
        File csvFile = new File("...");
        while (true) {
            if (csvFile.lastModified() != lastUpdated) {
                BufferedReader csvReader = null;
                List<String> values = new ArrayList<String>(20);
                try {
                    csvReader = new BufferedReader(new FileReader("..."));
                    for (int index = 0; index < 20; index++) {
                        values.add(CSVFile.readLine());
                    }
                    publish(values);
                    lastUpdated = csvFile.lastModified();
                } finally {
                    try {
                        csvReader.close();
                    } catch (Exception e) {
                    }
                }

                Thread.sleep(20000);

            }
        }
    }
}

You would place this at the end of your initialise method with new FileCheckerWorker.execute().

Updated

Instead of making your fields static, pass a reference to of the MapTest to the worker...

import java.awt.Color;
import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingWorker;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class MapTest {

    private JFrame frame;
    protected JTextField txtCardiff;
    protected JTextField txtBristol;
    protected JTextField txtSheffield;
    protected JTextField txtDerby;
    protected JTextField txtGlasgow;
    protected JTextField txtFalkirk;
    protected JTextField txtNewcastle;
    protected JTextField txtLeeds;
    protected JTextField txtPreston;
    protected JTextField txtManchester;
    protected JTextField txtWolverhampton;
    protected JTextField txtBirmingham;
    protected JTextField txtMiltonKeynes;
    protected JTextField txtPeterborough;
    protected JTextField txtColindale;
    protected JTextField txtStepneyGreen;
    protected JTextField txtSlough;
    protected JTextField txtFaraday;
    protected JTextField txtGuildford;
    protected JTextField txtSouthbank;
    private BufferedReader CSVFile = new BufferedReader(new FileReader("C:/Users/606854007/workspace/NetworkAppTest/jar/window/Cardiff.txt"));

    ArrayList<String> csv = new ArrayList<String>();

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(
                            UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e1) {
            e1.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MapTest window = new MapTest();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     *
     * @throws IOException
     */
    public MapTest() throws IOException {
        try {
            initialize();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    /**
     * Initialise the contents of the frame.
     *
     * @param output
     * @throws IOException
     */
    private void initialize() throws IOException {
        frame = new JFrame();
        frame.setBounds(0, 0, 1000, 1086);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        frame.setBackground(Color.CYAN);

        txtCardiff = new JTextField();
        txtCardiff.setBackground(Color.GREEN);
        txtCardiff.setBounds(305, 699, 102, 20);
        frame.getContentPane().add(txtCardiff);
        txtCardiff.setColumns(10);

        txtBristol = new JTextField();
        txtBristol.setBackground(Color.GREEN);
        txtBristol.setBounds(416, 780, 102, 20);
        frame.getContentPane().add(txtBristol);
        txtBristol.setColumns(10);

        txtSheffield = new JTextField();
        txtSheffield.setBackground(Color.GREEN);
        txtSheffield.setBounds(517, 356, 110, 20);
        frame.getContentPane().add(txtSheffield);
        txtSheffield.setColumns(10);

        txtDerby = new JTextField();
        txtDerby.setBackground(Color.GREEN);
        txtDerby.setBounds(582, 451, 90, 20);
        frame.getContentPane().add(txtDerby);
        txtDerby.setColumns(10);

        txtGlasgow = new JTextField();
        txtGlasgow.setBackground(Color.GREEN);
        txtGlasgow.setBounds(250, 94, 102, 20);
        frame.getContentPane().add(txtGlasgow);
        txtGlasgow.setColumns(10);

        txtFalkirk = new JTextField();
        txtFalkirk.setColumns(10);
        txtFalkirk.setBackground(Color.GREEN);
        txtFalkirk.setBounds(331, 41, 102, 20);
        frame.getContentPane().add(txtFalkirk);

        txtNewcastle = new JTextField();
        txtNewcastle.setColumns(10);
        txtNewcastle.setBackground(Color.GREEN);
        txtNewcastle.setBounds(424, 141, 111, 20);
        frame.getContentPane().add(txtNewcastle);

        txtLeeds = new JTextField();
        txtLeeds.setColumns(10);
        txtLeeds.setBackground(Color.GREEN);
        txtLeeds.setBounds(481, 244, 102, 20);
        frame.getContentPane().add(txtLeeds);

        txtPreston = new JTextField();
        txtPreston.setColumns(10);
        txtPreston.setBackground(Color.GREEN);
        txtPreston.setBounds(356, 221, 102, 20);
        frame.getContentPane().add(txtPreston);

        txtManchester = new JTextField();
        txtManchester.setColumns(10);
        txtManchester.setBackground(Color.GREEN);
        txtManchester.setBounds(394, 394, 124, 20);
        frame.getContentPane().add(txtManchester);

        txtWolverhampton = new JTextField();
        txtWolverhampton.setColumns(10);
        txtWolverhampton.setBackground(Color.GREEN);
        txtWolverhampton.setBounds(360, 486, 153, 20);
        frame.getContentPane().add(txtWolverhampton);

        txtBirmingham = new JTextField();
        txtBirmingham.setColumns(10);
        txtBirmingham.setBackground(Color.GREEN);
        txtBirmingham.setBounds(424, 553, 128, 20);
        frame.getContentPane().add(txtBirmingham);

        txtMiltonKeynes = new JTextField();
        txtMiltonKeynes.setColumns(10);
        txtMiltonKeynes.setBackground(Color.GREEN);
        txtMiltonKeynes.setBounds(474, 604, 135, 20);
        frame.getContentPane().add(txtMiltonKeynes);

        txtPeterborough = new JTextField();
        txtPeterborough.setColumns(10);
        txtPeterborough.setBackground(Color.GREEN);
        txtPeterborough.setBounds(655, 576, 135, 20);
        frame.getContentPane().add(txtPeterborough);

        txtColindale = new JTextField();
        txtColindale.setColumns(10);
        txtColindale.setBackground(Color.GREEN);
        txtColindale.setBounds(541, 699, 107, 20);
        frame.getContentPane().add(txtColindale);

        txtStepneyGreen = new JTextField();
        txtStepneyGreen.setColumns(10);
        txtStepneyGreen.setBackground(Color.GREEN);
        txtStepneyGreen.setBounds(667, 699, 137, 20);
        frame.getContentPane().add(txtStepneyGreen);

        txtSlough = new JTextField();
        txtSlough.setColumns(10);
        txtSlough.setBackground(Color.GREEN);
        txtSlough.setBounds(525, 756, 102, 20);
        frame.getContentPane().add(txtSlough);

        txtFaraday = new JTextField();
        txtFaraday.setColumns(10);
        txtFaraday.setBackground(Color.GREEN);
        txtFaraday.setBounds(650, 756, 102, 20);
        frame.getContentPane().add(txtFaraday);

        txtGuildford = new JTextField();
        txtGuildford.setColumns(10);
        txtGuildford.setBackground(Color.GREEN);
        txtGuildford.setBounds(525, 822, 102, 20);
        frame.getContentPane().add(txtGuildford);

        txtSouthbank = new JTextField();
        txtSouthbank.setColumns(10);
        txtSouthbank.setBackground(Color.GREEN);
        txtSouthbank.setBounds(655, 807, 115, 20);
        frame.getContentPane().add(txtSouthbank);

        JLabel lblNewLabel = new JLabel("New label");
        lblNewLabel.setForeground(Color.BLACK);
        lblNewLabel.setBackground(Color.BLACK);
        lblNewLabel.setIcon(new ImageIcon(
                        "C:\\Users\\606854007\\workspace\\NetworkAppTest\\Test\\window\\England_Wales.gif"));
        lblNewLabel.setBounds(33, 11, 890, 1086);
        frame.getContentPane().add(lblNewLabel);

        new FileCheckerWorker(this).execute();

    }

    public class FileCheckerWorker extends SwingWorker<Object, List<String>> {

        private MapTest mapTest;

        public FileCheckerWorker(MapTest mapTest) {
            this.mapTest = mapTest;
        }

        @Override
        protected void process(List<List<String>> chunks) {
            List<String> values = chunks.get(chunks.size() - 1);

            mapTest.txtCardiff.setText(values.get(0));
            mapTest.txtBristol.setText(values.get(1));
            mapTest.txtSheffield.setText(values.get(2));
            mapTest.txtDerby.setText(values.get(3));
            mapTest.txtGlasgow.setText(values.get(4));
            mapTest.txtFalkirk.setText(values.get(5));
            mapTest.txtNewcastle.setText(values.get(6));
            mapTest.txtLeeds.setText(values.get(7));
            mapTest.txtPreston.setText(values.get(8));
            mapTest.txtManchester.setText(values.get(9));
            mapTest.txtWolverhampton.setText(values.get(10));
            mapTest.txtBirmingham.setText(values.get(11));
            mapTest.txtMiltonKeynes.setText(values.get(12));
            mapTest.txtPeterborough.setText(values.get(13));
            mapTest.txtColindale.setText(values.get(14));
            mapTest.txtStepneyGreen.setText(values.get(15));
            mapTest.txtSlough.setText(values.get(16));
            mapTest.txtFaraday.setText(values.get(17));
            mapTest.txtGuildford.setText(values.get(18));
            mapTest.txtSouthbank.setText(values.get(19));
        }

        @Override
        protected Object doInBackground() throws Exception {
            long lastUpdated = -1;
            File csvFile = new File("C:/Users/606854007/workspace/NetworkAppTest/Jar/window/Cardiff.txt");
            while (true) {
                if (csvFile.lastModified() != lastUpdated) {
                    BufferedReader csvReader = null;
                    List<String> values = new ArrayList<String>(20);
                    try {
                        csvReader = new BufferedReader(new FileReader("C:/Users/606854007/workspace/NetworkAppTest/Jar/window/Cardiff.txt"));
                        for (int index = 0; index < 20; index++) {
                            values.add(mapTest.CSVFile.readLine());
                        }
                        publish(values);
                        lastUpdated = csvFile.lastModified();
                    } finally {
                        try {
                            csvReader.close();
                        } catch (Exception e) {
                        }
                    }

                    Thread.sleep(5000);
                    System.out.println("Check For Change");
                }
            }
        }
    }
}
MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
  • I will try this thankyou, i do not fully understand but i will try and look into it before asking anything else – Wilson Mar 04 '13 at 09:46
  • Quick question, if i used a CSV (comma separated file) would it be easy to display the information in the correct Jtextfields, if its too much to answer ina single comment no worries :) thankyou – Wilson Mar 04 '13 at 09:50
  • Depends. If you're using a library to load the CSV, possibly. – MadProgrammer Mar 04 '13 at 09:55
  • // Assign the values to the UI... What do you mean UI, sorry not down with the Java lingo yet :) – Wilson Mar 04 '13 at 12:11
  • how do i check for updates... – Wilson Mar 04 '13 at 14:08
  • // Check to see if anything needs to updated... that is my question... i have added your code to mine and sorted it all out, but when i make a change to the notepad file it doesnt update the Textfields on the GUI – Wilson Mar 04 '13 at 14:09
  • UI = User Interface, GUI, your textfields. *"Check to see if anything needs to updated"* thought you had that part worked out. Read the file, compare the incoming values with those you already have (I'd have master ArrayList) and publish the results if they do. You could check the File's last modified date, or if you're using Java 7, you could use a [File Watcher](http://docs.oracle.com/javase/tutorial/essential/io/notification.html). You need to update your text fields in the process method, since you've not shared that code with us. It's impossible for me to guess how you do this – MadProgrammer Mar 04 '13 at 19:25
  • ermm no the only part of the code i have done is : I can go into the file and get the information, display it to the correct textfield. i still dont know how to: check for updates update the textfield – Wilson Mar 05 '13 at 11:52
  • check updated post for my code :) – Wilson Mar 05 '13 at 11:59
  • ~Thank you so much for your help: the code you have supplied looks like it should be just what i need... however i have 2 problems, one is that: Illegal modifier for the local class FileCheckerWorker; only abstract or final is permitted Its saying i need to remove the 'public' out of the 'class FileCheckerWorker' line. and second you said at the end to add in 'new FileCheckerWorker.execute()' but whatever i seem to do with it, it doesnt like it... sorry im such a beginner at Java, – Wilson Mar 06 '13 at 08:51
  • First, where are you declaring `FileCheckWorker`? Are you declaring it in it's own file name `FileCheckWorker.java`? Secondly. When you want start monitoring for changes (ie like at the start of the program) you would call `new FileCheckWoker().execute()`. There's no need to assign the result to anything, as you won't need to interact with it – MadProgrammer Mar 06 '13 at 08:57
  • Im delcaring it at the end of my 'initialise' method, like you said. and no but im starting to think that i should as whereever i put the 'new FileCheckerWorker().execute()' it asks me to create a new class. Oh and i would like to call the 'new FileCheckerWorker().execute()' at the start, which to me seems like the best bet. again thank you so much, is there anyway i can give you rep etc on this site? – Wilson Mar 06 '13 at 09:08
  • You should be able to start the worker any time you want. 1- Make sure you've declared the class in a correctly named file (it must BE named `FileCheckerWorker.java`) and the class within must be named the same. 2- That you've added a import statement if the `FileCheckerWorker` isn't in the same package. You can up-vote the question if you haven't already or if the answer has helped you reach a conclusion to your question, you can accept the answer (little tick next to the answer) – MadProgrammer Mar 06 '13 at 09:43
  • Ive done all this, however all off my; txtCardiff, txtBristol etc cant be resolved, i cannot remember how to sort this problem, im surprised your not laughing in my face at how stupid im being – Wilson Mar 06 '13 at 09:51
  • You think you do stupid things :P - Might be worth posting and update to the question so I can what you are doing – MadProgrammer Mar 06 '13 at 09:53
  • okey give me 2 seconds :) and in short ive Made all my JTextField variables static which seem to work but the file is being a douche when i put the static modifier there – Wilson Mar 06 '13 at 10:11
  • i have done this and im still getting the same problem :/ is there anything else i need to do, dont know how you have so much patience with me :p it also gives: 'The value of the field FileCheckerWorker.mapTest is not used ' – Wilson Mar 06 '13 at 11:11
  • Make sure you change all references to your text fields to reference through the `MapTest` reference, ie `mapTest.txtCardiff.setText(values.get(0));` – MadProgrammer Mar 06 '13 at 11:14
  • For this to work, the text fields will need to be `public` or `protected` – MadProgrammer Mar 06 '13 at 11:15
  • okay ive done this and set the textfields to protected, yet when i change the values in my notepad file they dont update:( Everything runs okay but it still doesnt update itself :( – Wilson Mar 06 '13 at 11:21
  • ooooh and for the line : publish(values); i get a warning message saying : 'Type safety : A generic array of List is created for a varargs parameter' is it major? – Wilson Mar 06 '13 at 11:22
  • sorry for the other version of this question i didnt think it uploaded proeprly, im still having trouble getting it to work – Wilson Mar 06 '13 at 14:31
  • I've replaced the least example with a full code example. The reason your were getting a NPE was because you were passing `null` to the `FileCheckerWorker`, you needed to pass a reference of the `MapTest`, as specified by the constructors parameter – MadProgrammer Mar 06 '13 at 20:05
  • Yes i saw this and thought it was a little weird, thank you, it seems as if its updatings, yet its not updating the GUI? I believe its updating because when i update/change my file it runs and displays the: System.out.println("Check For Change"); Yet it doesnt change the Text in the TextField :( – Wilson Mar 11 '13 at 16:33