Advertisement
Guest User

Untitled

a guest
May 3rd, 2015
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.71 KB | None | 0 0
  1. import java.awt.Dimension;
  2. import java.awt.GridLayout;
  3. import java.awt.Toolkit;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.io.BufferedReader;
  7. import java.io.FileReader;
  8. import java.util.ArrayList;
  9. import java.util.List;
  10. import java.util.StringTokenizer;
  11. import java.util.Vector;
  12. import java.util.concurrent.CountDownLatch;
  13. import java.util.concurrent.Semaphore;
  14.  
  15. import javax.swing.BoxLayout;
  16. import javax.swing.JButton;
  17. import javax.swing.JFrame;
  18. import javax.swing.JLabel;
  19. import javax.swing.JPanel;
  20. import javax.swing.JProgressBar;
  21. import javax.swing.JScrollPane;
  22. import javax.swing.JTable;
  23. import javax.swing.JTextField;
  24. import javax.swing.SwingUtilities;
  25. import javax.swing.table.DefaultTableModel;
  26.  
  27. public class WebFrame extends JFrame implements ActionListener {
  28.  
  29. private DefaultTableModel model;
  30. private JTable table;
  31. private JButton concurrent, single, stop;
  32. private JTextField field;
  33. private JLabel running, completed, elapsed;
  34. private JProgressBar bar;
  35.  
  36. private List<String> urls;
  37. private Launcher launch;
  38.  
  39. public static final int WIDTH = 600;
  40. public static final int HEIGHT = 600;
  41.  
  42. public WebFrame() {
  43. super("WebLoader");
  44. Toolkit tk = Toolkit.getDefaultToolkit();
  45. Dimension screenSize = tk.getScreenSize();
  46. int x = (screenSize.width - WIDTH) / 2;
  47. int y = (screenSize.height - HEIGHT) / 2;
  48. this.setLocation(x, y);
  49. this.setSize(WIDTH, HEIGHT);
  50. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  51. this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
  52.  
  53. buildTable();
  54. buildRest();
  55.  
  56. this.setVisible(true);
  57.  
  58. }
  59.  
  60. private void buildRest() {
  61. JPanel belowPanel = new JPanel();
  62. belowPanel.setLayout(new BoxLayout(belowPanel, BoxLayout.Y_AXIS));
  63. concurrent = new JButton("Cocunrrent Fetch");
  64. single = new JButton("Single Fetch");
  65. field = new JTextField();
  66. field.setMaximumSize(new Dimension(30, 25));
  67. running = new JLabel("Running:0");
  68. completed = new JLabel("Completed:0");
  69. elapsed = new JLabel("Elapsed");
  70. bar = new JProgressBar();
  71. stop = new JButton("Stop");
  72. stop.setEnabled(false);
  73. belowPanel.add(concurrent);
  74. belowPanel.add(single);
  75. belowPanel.add(field);
  76. belowPanel.add(running);
  77. belowPanel.add(completed);
  78. belowPanel.add(elapsed);
  79. belowPanel.add(bar);
  80. belowPanel.add(stop);
  81. field.addActionListener(this);
  82. single.addActionListener(this);
  83. concurrent.addActionListener(this);
  84. stop.addActionListener(this);
  85. this.add(belowPanel);
  86.  
  87. }
  88.  
  89. private void buildTable() {
  90. model = new DefaultTableModel(new String[] { "url", "status" }, 0);
  91. table = new JTable(model);
  92. table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
  93. JScrollPane scrollpane = new JScrollPane(table);
  94. scrollpane.setPreferredSize(new Dimension(600, 300));
  95. this.add(scrollpane);
  96. urls = new ArrayList<String>();
  97. try {
  98.  
  99. FileReader fr = new FileReader("links.txt");
  100. BufferedReader br = new BufferedReader(fr);
  101. String line;
  102. while ((line = br.readLine()) != null) {
  103. Vector v = new Vector();
  104. v.add(line);
  105. v.add("");
  106. model.addRow(v);
  107.  
  108. urls.add(line);
  109. }
  110.  
  111. br.close();
  112. } catch (Exception e) {
  113. System.out.println("Can't find the file");
  114. }
  115.  
  116. }
  117.  
  118. public void updateTable(String string, int row) {
  119. model.setValueAt(string,row,1);
  120.  
  121. }
  122.  
  123. public Launcher getLauncher() {
  124. return this.launch;
  125. }
  126.  
  127.  
  128. @Override
  129. public void actionPerformed(ActionEvent arg0) {
  130. if (arg0.getSource() == concurrent || arg0.getSource() == single) {
  131. System.out.println("actionevet");
  132. stop.setEnabled(true);
  133. concurrent.setEnabled(false);
  134. single.setEnabled(false);
  135. bar.setMaximum(urls.size());
  136. int numThreads = 0;
  137. if (arg0.getSource() == single)
  138. numThreads = 1;
  139. else
  140. numThreads = Integer.parseInt(field.getText());
  141. launch = new Launcher(numThreads,this);
  142. launch.start();
  143.  
  144. }
  145.  
  146. }
  147.  
  148. public class Launcher extends Thread {
  149. private Semaphore threadsAllowed;
  150. private int threads;
  151. private WebFrame frame;
  152. private int runningNum;
  153. private CountDownLatch latch;
  154. private List<WebWorker> workers;
  155. private int numCompleted;
  156.  
  157. public Launcher(int numThreads, WebFrame webFrame) {
  158. threads=numThreads;
  159. this.frame=webFrame;
  160. runningNum=0;
  161. latch=new CountDownLatch(urls.size());
  162. workers=new ArrayList<WebWorker>();
  163. numCompleted=0;
  164. }
  165. public synchronized void changeRunning(int i){
  166. runningNum+=i;
  167. if(i==-1){
  168. numCompleted++;
  169. SwingUtilities.invokeLater(new Runnable() {
  170. public void run() {
  171. completed.setText("Completed:" + numCompleted);
  172. }
  173. });
  174. }else{
  175. SwingUtilities.invokeLater(new Runnable() {
  176. public void run() {
  177. bar.setValue(bar.getValue() + 1);
  178. }
  179. });
  180.  
  181. }
  182. SwingUtilities.invokeLater(new Runnable() {
  183. public void run() {
  184. running.setText("Running:" + runningNum);
  185. }
  186. });
  187. }
  188. //for threads to signal launcher that they're done working
  189. public void signal(){
  190. latch.countDown();
  191. threadsAllowed.release();
  192. }
  193. @Override
  194. public void run() {
  195. changeRunning(1);
  196. threadsAllowed=new Semaphore(threads);
  197. long timeStart = System.currentTimeMillis();
  198. startThreads();
  199. try {
  200. latch.await();
  201. } catch (InterruptedException e) {
  202. e.printStackTrace();
  203. }
  204. long elapsedTime = System.currentTimeMillis() - timeStart;
  205. changeRunning(-1);
  206. updateGui(elapsedTime);
  207. }
  208. private void startThreads() {
  209. for(int i=0; i < urls.size(); i++){
  210. WebWorker worker=new WebWorker(urls.get(i),i, frame);
  211. workers.add(worker);
  212. try {
  213. threadsAllowed.acquire();
  214. } catch (InterruptedException e) {
  215.  
  216. e.printStackTrace();
  217. }
  218. worker.start();
  219. }
  220.  
  221. }
  222. private void updateGui(long elapsedTime) {
  223. SwingUtilities.invokeLater(new Runnable() {
  224. public void run() {
  225. running.setText("Running:" + runningNum);
  226. completed.setText("Completed:" + latch.getCount());
  227. elapsed.setText("Elapsed:" + elapsedTime);
  228. stop.setEnabled(false);
  229. concurrent.setEnabled(true);
  230. single.setEnabled(true);
  231. bar.setValue(0);
  232.  
  233. }
  234. });
  235.  
  236. }
  237.  
  238. }
  239.  
  240. public static void main(String[] args) {
  241. WebFrame frame = new WebFrame();
  242. System.out.println(Thread.currentThread().getName());
  243. }
  244.  
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement