java - 尝试每 x 秒执行一次文件

标签 java quartz-scheduler

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

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。其中有一个主要功能。在主函数中,您创建 Learningfromscrach 的另一个实例,该实例现在被传递给计时器以每 10 秒运行一次。当它在 10 秒内运行时,它会创建另一个 Learningfromscrach 实例,依此类推。

您实际上并不需要每 10 秒重新实现一次 Learningfromscrach。您想要的是数据每 10 秒更新一次。您应该能够在更新函数上设置一个每 10 秒运行一次的计时器。 (我现在无法编写代码示例,但请调查一下,看看您能走多远。)

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

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

}

关于java - 尝试每 x 秒执行一次文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26207743/

相关文章:

java - DDD 中域类的 getter 不应以 "get"为前缀,为什么?

java - For循环和输出

java - 在哪里下载以及如何安装 JAX-WS wsimport 工具?

java - 是否可以安排 Quartz 线程每秒运行一次?

quartz-scheduler - 使用 Quartz.net 配置 ADOJobStore

java - 使用 Quartz 和 spring 时的配置

java - 独特的 Java 和 Javascript 交织行为

java - 如何用Java中的匿名类替换监听器?

parallel-processing - Quartz .NET - 防止并行作业执行

java - 服务器关闭后 Quartz 作业重新触发