Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.awt.Dimension;
- import java.awt.GridLayout;
- import java.awt.Toolkit;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.BufferedReader;
- import java.io.FileReader;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.StringTokenizer;
- import java.util.Vector;
- import java.util.concurrent.CountDownLatch;
- import java.util.concurrent.Semaphore;
- import javax.swing.BoxLayout;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JProgressBar;
- import javax.swing.JScrollPane;
- import javax.swing.JTable;
- import javax.swing.JTextField;
- import javax.swing.SwingUtilities;
- import javax.swing.table.DefaultTableModel;
- public class WebFrame extends JFrame implements ActionListener {
- private DefaultTableModel model;
- private JTable table;
- private JButton concurrent, single, stop;
- private JTextField field;
- private JLabel running, completed, elapsed;
- private JProgressBar bar;
- private List<String> urls;
- private Launcher launch;
- public static final int WIDTH = 600;
- public static final int HEIGHT = 600;
- public WebFrame() {
- super("WebLoader");
- Toolkit tk = Toolkit.getDefaultToolkit();
- Dimension screenSize = tk.getScreenSize();
- int x = (screenSize.width - WIDTH) / 2;
- int y = (screenSize.height - HEIGHT) / 2;
- this.setLocation(x, y);
- this.setSize(WIDTH, HEIGHT);
- this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
- buildTable();
- buildRest();
- this.setVisible(true);
- }
- private void buildRest() {
- JPanel belowPanel = new JPanel();
- belowPanel.setLayout(new BoxLayout(belowPanel, BoxLayout.Y_AXIS));
- concurrent = new JButton("Cocunrrent Fetch");
- single = new JButton("Single Fetch");
- field = new JTextField();
- field.setMaximumSize(new Dimension(30, 25));
- running = new JLabel("Running:0");
- completed = new JLabel("Completed:0");
- elapsed = new JLabel("Elapsed");
- bar = new JProgressBar();
- stop = new JButton("Stop");
- stop.setEnabled(false);
- belowPanel.add(concurrent);
- belowPanel.add(single);
- belowPanel.add(field);
- belowPanel.add(running);
- belowPanel.add(completed);
- belowPanel.add(elapsed);
- belowPanel.add(bar);
- belowPanel.add(stop);
- field.addActionListener(this);
- single.addActionListener(this);
- concurrent.addActionListener(this);
- stop.addActionListener(this);
- this.add(belowPanel);
- }
- private void buildTable() {
- model = new DefaultTableModel(new String[] { "url", "status" }, 0);
- table = new JTable(model);
- table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
- JScrollPane scrollpane = new JScrollPane(table);
- scrollpane.setPreferredSize(new Dimension(600, 300));
- this.add(scrollpane);
- urls = new ArrayList<String>();
- try {
- FileReader fr = new FileReader("links.txt");
- BufferedReader br = new BufferedReader(fr);
- String line;
- while ((line = br.readLine()) != null) {
- Vector v = new Vector();
- v.add(line);
- v.add("");
- model.addRow(v);
- urls.add(line);
- }
- br.close();
- } catch (Exception e) {
- System.out.println("Can't find the file");
- }
- }
- public void updateTable(String string, int row) {
- model.setValueAt(string,row,1);
- }
- public Launcher getLauncher() {
- return this.launch;
- }
- @Override
- public void actionPerformed(ActionEvent arg0) {
- if (arg0.getSource() == concurrent || arg0.getSource() == single) {
- System.out.println("actionevet");
- stop.setEnabled(true);
- concurrent.setEnabled(false);
- single.setEnabled(false);
- bar.setMaximum(urls.size());
- int numThreads = 0;
- if (arg0.getSource() == single)
- numThreads = 1;
- else
- numThreads = Integer.parseInt(field.getText());
- launch = new Launcher(numThreads,this);
- launch.start();
- }
- }
- public class Launcher extends Thread {
- private Semaphore threadsAllowed;
- private int threads;
- private WebFrame frame;
- private int runningNum;
- private CountDownLatch latch;
- private List<WebWorker> workers;
- private int numCompleted;
- public Launcher(int numThreads, WebFrame webFrame) {
- threads=numThreads;
- this.frame=webFrame;
- runningNum=0;
- latch=new CountDownLatch(urls.size());
- workers=new ArrayList<WebWorker>();
- numCompleted=0;
- }
- public synchronized void changeRunning(int i){
- runningNum+=i;
- if(i==-1){
- numCompleted++;
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- completed.setText("Completed:" + numCompleted);
- }
- });
- }else{
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- bar.setValue(bar.getValue() + 1);
- }
- });
- }
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- running.setText("Running:" + runningNum);
- }
- });
- }
- //for threads to signal launcher that they're done working
- public void signal(){
- latch.countDown();
- threadsAllowed.release();
- }
- @Override
- public void run() {
- changeRunning(1);
- threadsAllowed=new Semaphore(threads);
- long timeStart = System.currentTimeMillis();
- startThreads();
- try {
- latch.await();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- long elapsedTime = System.currentTimeMillis() - timeStart;
- changeRunning(-1);
- updateGui(elapsedTime);
- }
- private void startThreads() {
- for(int i=0; i < urls.size(); i++){
- WebWorker worker=new WebWorker(urls.get(i),i, frame);
- workers.add(worker);
- try {
- threadsAllowed.acquire();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- worker.start();
- }
- }
- private void updateGui(long elapsedTime) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- running.setText("Running:" + runningNum);
- completed.setText("Completed:" + latch.getCount());
- elapsed.setText("Elapsed:" + elapsedTime);
- stop.setEnabled(false);
- concurrent.setEnabled(true);
- single.setEnabled(true);
- bar.setValue(0);
- }
- });
- }
- }
- public static void main(String[] args) {
- WebFrame frame = new WebFrame();
- System.out.println(Thread.currentThread().getName());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement