2014-10-05 3 views
1

Обновлен код, повторяющийся каждые 10 секунд. Однако проблема заключается в том, что он создает новый графический интерфейс на экране каждые 10 секунд, а не ТОЛЬКО обновляет данные каждые 10 секунд. пожалуйста, вы можете посоветоватьПытается выполнить файл каждые x секунд

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

} 
+0

Если вы используете newJob, не должны класс вы даете это осуществить работу? – Rup

+0

Вы имеете в виду имя публичного класса SimpleDialogBoxjob? – Ingram

+0

Да, так как это класс, который вы переходите в 'newJob (SimpleDialogBox.class)': вам нужно объявить его как 'public class SimpleDialogBox, который реализует Job {' (и импортирует org.quartz.Job). – Rup

ответ

1

У вас есть только один класс, Learningfromscrach. В нем у вас есть основная функция. В основной функции вы создаете еще один экземпляр Learningfromscrach, который теперь передается вашему таймеру каждые 10 секунд. Когда он запустится через 10 секунд, он создает еще один экземпляр Learningfromscrach и т. Д.

Вам не нужно повторно внедрять Learningfromscrach каждые 10 секунд. Вы хотите, чтобы данные обновлялись каждые 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"); 
} 

}

+0

@ barna10 Я отдам вам это. Спасибо за ваши советы. Кажется, я собираю эту встречу ее с помощью вас и книг. Извиняюсь за мою наивность, но это кажется гораздо более мощным и быстрым, чем VBA. – Ingram

+0

VBA - это структурированный язык, ориентированный на объект. Это другое мышление. Не беспокойтесь о себе. – barna10

+0

@ barna10, спасибо. В настоящее время я рассматриваю создание задачи таймера при решении моего вопроса. если я расширяю JFrame, могу ли я также расширить TimerTask в той же строке? посмотреть что-то вроде этого открытого класса Learningfromscrach extends JFrame extends TimerTask { – Ingram

Смежные вопросы