尝试每隔x秒执行一次文件

尝试每隔x秒执行一次文件

本文介绍了尝试每隔x秒执行一次文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请查找每10秒重复一次的更新代码。然而问题是它每10秒在屏幕上创建一个新的GUI,而不是每10秒更新一次数据。请告诉你

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 every 10 seconds. please can you advise

package learningfromscrach;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.border.TitledBorder;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import javax.swing.JTextArea;
import com.sun.java.swing.*;
import javax.swing.table.*;
import java.awt.FlowLayout;
import java.text.DecimalFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import org.apache.log4j.BasicConfigurator;
import static org.quartz.DateBuilder.evenMinuteDate;
import org.quartz.Job;
import static org.quartz.JobBuilder.newJob;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import static org.quartz.TriggerBuilder.newTrigger;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.awt.Toolkit;


public class Learningfromscrach extends JFrame implements Job {

    Toolkit toolkit;
    Timer timer;

//declare all the parts that make up the GUI
private JLabel textJLabel;
private JPanel PanelJlabel;//JLabel is actually a parameter in JAVA
private TitledBorder PanelJborder;



DefaultTableModel model;
JTable table;


public Learningfromscrach(int seconds)
   //tell java to initiate the create interface
        //this is what is passed to the timer every 10 seconds
   {

    createUserInterface();//create method private void createUserInterface//aframe is parameter this has to match the private void
    }

class Learningtask extends TimerTask {
public void run() {
System.out.format("Timer Task Finished..!%n");
//System.exit(0); // Terminate the timer thread
}
}

private void createUserInterface()

 //all the parts to create the userinterface
{//from here
        Container contentPane = getContentPane();
        contentPane.setLayout( null);// i am responsible for setting positioning and size of components
        setTitle("Cashout Prices");//setTitle is also a JAVA Parameter


        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        setSize((int) (screenSize.width/6), (int) (screenSize.height/1.1));//cast int for width
        setVisible(true);    //makes the java application show



       System.out.format("Timer task started at:"+new Date());
         String url = "http://bmreports.com/bsp/additional/soapfunctions.php?element=SYSPRICE&dT=NRT";
  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

  //DecimalFormat df = new DecimalFormat("#.###");
//df.format(0.912385);


  String[] numbers1;
    numbers1 = Periodparagraphs.text().split(" ");



    String[] numbers;
    numbers = SSPparagraphs.text().split(" ");

    String[] numbers0;
    numbers0 = SBPparagraphs.text().split(" ");

    //String str = "1234";
//int num = Integer.parseInt(str);

    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;
    }
    //model = new DefaultTableModel(col, 90);//50 is number of rows --You don't seem to need this

    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] = "  ";
        }
    }



     //header.setBackground(Color.yellow);
    //    model = new DefaultTableModel(col,90);//50 is number of rows

    String col[] = {"SBP","SSP","Period"};
    table=new JTable(data,col){@Override



       public boolean isCellEditable(int arg0, int arg1) {
    return false;
        }};

       JTableHeader header = table.getTableHeader();
header.setBackground(Color.yellow);
    contentPane.add(table);

        //table.setValueAt(SBPparagraphs.text(),0,0); //first number is moves placing down by 2 rows//2nd number is next cclumn and so on
        //table.setValueAt("fgfg",0,0);




        table.setSize(screenSize.width/2, (int) (screenSize.height/1.1));
        table.setBounds(16,50,400,2000);
    table.setLayout(null);
        table.setVisible(true);
//add(table.getTableHeader(), BorderLayout.NORTH);
  //      table.setLayout(new BorderLayout());
//add(table, BorderLayout.CENTER);
    setDefaultCloseOperation(EXIT_ON_CLOSE);


}





//to hear this all refers to the contentpane

    /**
     * @param args the command line arguments
     */


    public static void main(String[] args) throws SchedulerException, InterruptedException {
            // TODO code application logic here
// BasicConfigurator.configure();
        new Learningfromscrach(1);



        System.out.format("Task scheduled.. Now wait for 5 sec to see next message..%n");


    }




    //next step to understand how to get data into the panel

    @Override
    public void execute(JobExecutionContext jec) throws JobExecutionException {
        _log.info("Hello World! - " + new Date());
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

}


推荐答案

你只有一个班,Learningfromscrach。在其中你有一个主要功能。在main函数中,您创建了另一个Learningfromscrach的实例,它现在传递给您的计时器,每10秒运行一次。当它在10秒内运行时,它会创建另一个Learningfromscrach实例,依此类推。

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.

你真的不需要每10秒重新实现一次Learningfromscrach。您想要的是数据每10秒更新一次。您应该能够在每10秒运行一次的更新功能上设置计时器。 (我现在不能做代码示例,但要调查一下,看看你能走多远。)

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.)

编辑:我重构了你的项目,消除了未使用的元素并添加了一些方法和一个JScrollPane。希望这会有所帮助。

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");
}

}

这篇关于尝试每隔x秒执行一次文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-26 04:55