From 28169d2b2f90af003dce01c3c8026b905b747868 Mon Sep 17 00:00:00 2001 From: SeniorJava Date: Mon, 22 Jun 2015 08:22:12 +0300 Subject: [PATCH 1/3] Button Handler --- META-INF/MANIFEST.MF | 1 + src/com/company/KeyboardObserver.java | 81 +++++++++++++++++++++++++++ src/com/company/Main.java | 28 ++++++++- src/com/company/MyThreads.java | 18 +++++- src/com/company/test.txt | 3 + 5 files changed, 129 insertions(+), 2 deletions(-) create mode 100644 src/com/company/KeyboardObserver.java diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF index 59499bc..680a1e2 100644 --- a/META-INF/MANIFEST.MF +++ b/META-INF/MANIFEST.MF @@ -1,2 +1,3 @@ Manifest-Version: 1.0 +Main-Class: com.company.Main diff --git a/src/com/company/KeyboardObserver.java b/src/com/company/KeyboardObserver.java new file mode 100644 index 0000000..8073d47 --- /dev/null +++ b/src/com/company/KeyboardObserver.java @@ -0,0 +1,81 @@ +package com.company; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.util.Queue; +import java.util.concurrent.ArrayBlockingQueue; + +/** + * Created by senior on 20.06.15. + */ +public class KeyboardObserver extends Thread { + private Queue keyEvents = new ArrayBlockingQueue(100); + + private JFrame frame; + + @Override + public void run() + { + frame = new JFrame("KeyPress Tester"); + frame.setTitle("Transparent JFrame Demo"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + frame.setUndecorated(true); + frame.setSize(400, 400); + frame.setExtendedState(JFrame.MAXIMIZED_BOTH); + frame.setLayout(new GridBagLayout()); + + frame.setOpacity(0.0f); + frame.setVisible(true); + + frame.addFocusListener(new FocusListener() + { + @Override + public void focusGained(FocusEvent e) + { + //do nothing + } + + @Override + public void focusLost(FocusEvent e) + { + System.exit(0); + } + }); + + + frame.addKeyListener(new KeyListener() + { + + public void keyTyped(KeyEvent e) + { + //do nothing + } + + public void keyReleased(KeyEvent e) + { + //do nothing + } + + public void keyPressed(KeyEvent e) + { + keyEvents.add(e); + } + }); + } + + + public boolean hasKeyEvents() + { + return !keyEvents.isEmpty(); + } + + public KeyEvent getEventFromTop() + { + return keyEvents.poll(); + } +} diff --git a/src/com/company/Main.java b/src/com/company/Main.java index 4e3ff2b..3823895 100644 --- a/src/com/company/Main.java +++ b/src/com/company/Main.java @@ -1,6 +1,7 @@ package com.company; +import java.awt.event.KeyEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -16,6 +17,8 @@ public class Main { public static void main(String[] args) throws IOException, InterruptedException { File fileR = new File(args[0]); File fileW = new File(args[1]); + KeyboardObserver keyboardObserver = new KeyboardObserver(); + keyboardObserver.start(); BufferedReader reader = new BufferedReader(new FileReader(fileR)); @@ -28,17 +31,40 @@ public static void main(String[] args) throws IOException, InterruptedException } ThreadGroup threadGroup = new ThreadGroup("myGroup"); + for (int i = 0; i < strings.size(); i++) { threads.add(new Thread(threadGroup,new MyThreads(strings.get(i), new FileVisitCounter(), fileW.getName()),String.valueOf(i+1))); } for (Thread t : threads) { + +// if (!MyThreads.isFlag()) break; +//// t.start(); +// if (keyboardObserver.hasKeyEvents()) { +// KeyEvent event = keyboardObserver.getEventFromTop(); +// if (event.getKeyCode() == KeyEvent.VK_ESCAPE) { +// threadGroup.interrupt(); +// MyThreads.setFlag(false); +// break; +// } +// } t.start(); + } while (threadGroup.activeCount() > 0) { - Thread.sleep(1); + if (keyboardObserver.hasKeyEvents()) { + KeyEvent event = keyboardObserver.getEventFromTop(); + if (event.getKeyCode() == KeyEvent.VK_ESCAPE) { + threadGroup.interrupt(); + break; + } + } } + +// while (threadGroup.activeCount() > 0) { +// Thread.sleep(1); +// } new MyCSVWriter(fileW.getName()).writerToCSV(); diff --git a/src/com/company/MyThreads.java b/src/com/company/MyThreads.java index 9eb1a6a..accb192 100644 --- a/src/com/company/MyThreads.java +++ b/src/com/company/MyThreads.java @@ -10,11 +10,20 @@ */ public class MyThreads implements Runnable { + private static boolean flag = true; private String path; private FileVisitCounter fileVisitor; private String fileForWrite; private long count; + public static boolean isFlag() { + return flag; + } + + public static void setFlag(boolean flag) { + MyThreads.flag = flag; + } + public String getPath() { return path; } @@ -37,7 +46,14 @@ public void run() { try { Files.walkFileTree(p, fileVisitor); count = fileVisitor.getCount(); - System.out.println(Thread.currentThread().getName() + "\t" + this.getCount() + "\t" + this.getPath()); + + if (!Thread.currentThread().isInterrupted()) { + System.out.println(Thread.currentThread().getName() + "\t" + this.getCount() + "\t" + this.getPath()); + } + else { + flag = false; + System.out.println("Подсчет прерванн!"); + } new MyCSVWriter(fileForWrite).putResults(path,count); } catch (IOException e) { diff --git a/src/com/company/test.txt b/src/com/company/test.txt index 78ea387..7ba8293 100644 --- a/src/com/company/test.txt +++ b/src/com/company/test.txt @@ -3,3 +3,6 @@ /home/senior/Видео /home/senior/Загрузки /lib +/media/senior/yyy/Windows +/media/senior/yyy/Program Files +/media/senior/yyy/Users \ No newline at end of file From 458660c03e524a22e3294ec1d7f6c1c8a0026ced Mon Sep 17 00:00:00 2001 From: SeniorJava Date: Tue, 23 Jun 2015 09:38:35 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=87=D0=B5=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/company/FileVisitCounter.java | 5 ++- src/com/company/KeyboardObserver.java | 5 ++- src/com/company/Main.java | 56 +++++++++++++++------------ src/com/company/MyThreads.java | 10 +++-- 4 files changed, 45 insertions(+), 31 deletions(-) diff --git a/src/com/company/FileVisitCounter.java b/src/com/company/FileVisitCounter.java index c36e9a8..f116b27 100644 --- a/src/com/company/FileVisitCounter.java +++ b/src/com/company/FileVisitCounter.java @@ -18,7 +18,10 @@ public long getCount() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + if (!MyThreads.isRun())return FileVisitResult.TERMINATE; + else { count++; - return FileVisitResult.CONTINUE; + return FileVisitResult.CONTINUE;} + } } diff --git a/src/com/company/KeyboardObserver.java b/src/com/company/KeyboardObserver.java index 8073d47..b3e157a 100644 --- a/src/com/company/KeyboardObserver.java +++ b/src/com/company/KeyboardObserver.java @@ -20,8 +20,8 @@ public class KeyboardObserver extends Thread { @Override public void run() { - frame = new JFrame("KeyPress Tester"); - frame.setTitle("Transparent JFrame Demo"); + frame = new JFrame("KeyPress Observer"); + frame.setTitle("JFrame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setUndecorated(true); @@ -78,4 +78,5 @@ public KeyEvent getEventFromTop() { return keyEvents.poll(); } + } diff --git a/src/com/company/Main.java b/src/com/company/Main.java index 3823895..c1d2915 100644 --- a/src/com/company/Main.java +++ b/src/com/company/Main.java @@ -7,9 +7,10 @@ import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; public class Main { @@ -19,6 +20,7 @@ public static void main(String[] args) throws IOException, InterruptedException File fileW = new File(args[1]); KeyboardObserver keyboardObserver = new KeyboardObserver(); keyboardObserver.start(); + boolean isDone = false; BufferedReader reader = new BufferedReader(new FileReader(fileR)); @@ -36,37 +38,43 @@ public static void main(String[] args) throws IOException, InterruptedException threads.add(new Thread(threadGroup,new MyThreads(strings.get(i), new FileVisitCounter(), fileW.getName()),String.valueOf(i+1))); } - for (Thread t : threads) { - -// if (!MyThreads.isFlag()) break; -//// t.start(); -// if (keyboardObserver.hasKeyEvents()) { -// KeyEvent event = keyboardObserver.getEventFromTop(); -// if (event.getKeyCode() == KeyEvent.VK_ESCAPE) { -// threadGroup.interrupt(); -// MyThreads.setFlag(false); -// break; -// } -// } - t.start(); + ExecutorService pool = Executors.newFixedThreadPool(threads.size()); + List futures = new ArrayList<>(); + for (Thread t : threads) { + if (MyThreads.isRun()){ + futures.add(pool.submit(t)); + } + else{ + pool.shutdownNow(); + break; + } } - while (threadGroup.activeCount() > 0) { + while (!pool.isTerminated()) { if (keyboardObserver.hasKeyEvents()) { KeyEvent event = keyboardObserver.getEventFromTop(); if (event.getKeyCode() == KeyEvent.VK_ESCAPE) { - threadGroup.interrupt(); - break; + pool.shutdownNow(); + new MyCSVWriter(fileW.getName()).writerToCSV(); + System.out.println("Запись завершена"); + break; } } - } - -// while (threadGroup.activeCount() > 0) { -// Thread.sleep(1); -// } - new MyCSVWriter(fileW.getName()).writerToCSV(); + if (isDone) { + new MyCSVWriter(fileW.getName()).writerToCSV(); + System.out.println("Запись завершена"); + break; + } + for (Future f : futures) { + if (!f.isDone()) { + isDone = false; + break; + } + isDone = true; + } + } } diff --git a/src/com/company/MyThreads.java b/src/com/company/MyThreads.java index accb192..a3072bd 100644 --- a/src/com/company/MyThreads.java +++ b/src/com/company/MyThreads.java @@ -16,7 +16,7 @@ public class MyThreads implements Runnable { private String fileForWrite; private long count; - public static boolean isFlag() { + public static boolean isRun() { return flag; } @@ -48,15 +48,17 @@ public void run() { count = fileVisitor.getCount(); if (!Thread.currentThread().isInterrupted()) { - System.out.println(Thread.currentThread().getName() + "\t" + this.getCount() + "\t" + this.getPath()); + + System.out.println(Thread.currentThread().getName().charAt(Thread.currentThread().getName().length()-1) + "\t" + this.getCount() + "\t" + this.getPath()); + new MyCSVWriter(fileForWrite).putResults(path,count); } else { flag = false; System.out.println("Подсчет прерванн!"); } - new MyCSVWriter(fileForWrite).putResults(path,count); - } catch (IOException e) { + + } catch (Exception e) { e.printStackTrace(); } From 102ce90f9a9032ec79769d922ad37469d4bb0554 Mon Sep 17 00:00:00 2001 From: SeniorJava Date: Tue, 23 Jun 2015 09:43:12 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=87=D0=B5=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/company/MyThreads.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/com/company/MyThreads.java b/src/com/company/MyThreads.java index a3072bd..3c2d16a 100644 --- a/src/com/company/MyThreads.java +++ b/src/com/company/MyThreads.java @@ -20,10 +20,6 @@ public static boolean isRun() { return flag; } - public static void setFlag(boolean flag) { - MyThreads.flag = flag; - } - public String getPath() { return path; } @@ -39,7 +35,6 @@ public MyThreads(String path, FileVisitCounter fileVisitor, String fileForWrite) } - @Override public void run() { Path p = new File(path).toPath();