Trying to execute file every x seconds

后端 未结 1 1819
有刺的猬
有刺的猬 2021-01-16 14:31

Please find updated code that repeats every 10 seconds. However the issue is that it creates a new GUI on the screen every 10 seconds rather than ONLY updating the data ever

相关标签:
1条回答
  • 2021-01-16 15:06

    You only have one class, Learningfromscrach. Within it you have a main function. Within the main function you create another instance of Learningfromscrach which is now passed to your timer to be run every 10 seconds. When it runs in 10 seconds, it creates yet another instance of Learningfromscrach, and so on.

    You don't really need to re-implement Learningfromscrach every 10 seconds. What you want is for the data to update every 10 seconds. You should be able set a timer on an update function that will run every 10 seconds. (I can't do code examples right now, but investigate this and see how far you get.)

    edit: I refactored your project, eliminating the unused elements and adding some methods and a JScrollPane. Hope this helps.

    import java.awt.*;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.*;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.select.Elements;
    import javax.swing.table.*;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;
    import java.util.Timer;
    import java.util.TimerTask;
    import java.awt.Toolkit;
    import java.awt.BorderLayout;
    
    
    public class Learningfromscrach extends JFrame 
    {
        Toolkit toolkit;
        Timer timer = new Timer();
        DefaultTableModel model;
        JTable table;
        String url = "http://bmreports.com/bsp/additional/soapfunctions.php?element=SYSPRICE&dT=NRT";
        String col[] = {"SBP","SSP","Period"};
        JScrollPane scrollPane;
    
        public Learningfromscrach() 
        //tell java to initiate the create interface
        //this is what is passed to the timer every 10 seconds
        {
            createUserInterface();
        }
    
    private void createUserInterface()
    //all the parts to create the userinterface      
    {//from here
        setLayout( new BorderLayout());
        setTitle("Cashout Prices");//setTitle is also a JAVA Parameter
        setVisible(true);    //makes the java application show
    
    
        table = CreateTable(url,col);
    
        scrollPane = new JScrollPane(table,
                ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
                ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
        add(scrollPane,BorderLayout.CENTER);
        pack();
        setSize(getWidth(), 200); //initial size
    
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    
        int delay = 5000; //5 seconds
        int period = 5000; //5 seconds
    
        timer.scheduleAtFixedRate(new TimerTask() 
        {
            public void run() {
                RefreshTable(url, col);
                System.out.format("Task run..");
            }
        }, delay, period);
    }     
    private Object[][] GetTableInfo(String url)
    {
          Document doc = null;
          try 
          {
                doc = Jsoup.connect(url).get();
          } 
          catch (IOException ex) 
          {
                Logger.getLogger(Learningfromscrach.class.getName()).log(Level.SEVERE, null, ex);
          }
          Elements Periodparagraphs;      
          Elements SSPparagraphs;
          Elements SBPparagraphs; 
    
          Periodparagraphs = doc.select("SP");//counts the number of SSP Paragraphs in the entire document
          SSPparagraphs = doc.select("SSP");//counts the number of SSP Paragraphs in the entire document
          SBPparagraphs = doc.select("SBP");//counts the number of SBP Paragraphs in the entire document
    
          String[] numbers1;
          numbers1 = Periodparagraphs.text().split(" ");
    
          String[] numbers;
          numbers = SSPparagraphs.text().split(" ");
    
          String[] numbers0;
          numbers0 = SBPparagraphs.text().split(" ");
    
          int tableRows;
    
          if (numbers0.length > numbers.length && numbers0.length > numbers1.length)
          {
              tableRows = numbers0.length;
          }
          else if (numbers.length > numbers0.length && numbers.length > numbers1.length)
          {
              tableRows = numbers.length;
          }
          else
          {
              tableRows = numbers1.length;
          }
    
          Object[][] data = new String[tableRows][3];//3 is number of columns
    
          for (int x = 0; x < tableRows; x++ )
          {
              try
              {
                  data[x][0] = numbers1[x];
              }
              catch (IndexOutOfBoundsException e)
              {
                  data[x][0] = "  ";//error
              }
    
              try
              {
                  data[x][1] = numbers[x];
              }
              catch (IndexOutOfBoundsException e)
              {
                  data[x][1] = "  ";
              }
    
              try
              {
                  data[x][2] = numbers0[x];
              }
              catch (IndexOutOfBoundsException e)
              {
                  data[x][2] = "  ";
              }
          }
    
        return data;
    }
    
    private JTable CreateTable(String url, String[] cols)
    {
        JTable tempTable=new JTable(GetTableInfo(url),col)
        {
            @Override
            public boolean isCellEditable(int arg0, int arg1) 
            {
                return false;
            }   
        };
    
        JTableHeader header = tempTable.getTableHeader();
        header.setBackground(Color.yellow);
    
        tempTable.setLayout(null);
        tempTable.setVisible(true);
    
        return tempTable;
    }
    
    private void RefreshTable(String url, String[] cols)
    {
        Object[][] info = GetTableInfo(url);
        for (int row = 0; row < info.length; row++)
        {
            for (int column = 0; column < cols.length; column++)
            {
                table.setValueAt(info[row][column],row, column);
            }
        }
    }
    
    public static void main(String[] args) throws InterruptedException 
    {
        // TODO code application logic here
        // BasicConfigurator.configure();
        new Learningfromscrach();
    
        System.out.format("Task scheduled.. Now wait for 5 sec to see next message..%n");
    }
    

    }

    0 讨论(0)
提交回复
热议问题