From 31fcf3403b01e4f2bc3b51045abd50e5a7616d1c Mon Sep 17 00:00:00 2001 From: ScottCTD Date: Fri, 2 Oct 2020 17:50:00 +0800 Subject: [PATCH] Optimized Initialization process, including addInternalVocabularyPool --- build/VocabularyDecoder.jar | Bin 189101 -> 189480 bytes src/main/java/xyz/scottc/Main.java | 4 +- .../commonModeFrame/component/LeftPanel.java | 36 ++++---------- .../scottc/frames/mainFrame/MainFrame.java | 45 ++++++++++++++---- 4 files changed, 48 insertions(+), 37 deletions(-) diff --git a/build/VocabularyDecoder.jar b/build/VocabularyDecoder.jar index fef29c383006e26b938e786214bc2de963d6851e..57b2bce03cc5434c847156d43df8f02ce69e3096 100644 GIT binary patch delta 16255 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 delta 16054 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 diff --git a/src/main/java/xyz/scottc/Main.java b/src/main/java/xyz/scottc/Main.java index b401324..c941c7c 100644 --- a/src/main/java/xyz/scottc/Main.java +++ b/src/main/java/xyz/scottc/Main.java @@ -13,12 +13,12 @@ public static void main(String[] args) { } private static void initFrame() { -/* try { + try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | UnsupportedLookAndFeelException | IllegalAccessException e) { e.printStackTrace(); - }*/ + } MainFrame frame = new MainFrame("Vocabulary Decoder"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(new Dimension(1000, 1000)); diff --git a/src/main/java/xyz/scottc/frames/commonModeFrame/component/LeftPanel.java b/src/main/java/xyz/scottc/frames/commonModeFrame/component/LeftPanel.java index 0fcf2a0..0dec7f1 100644 --- a/src/main/java/xyz/scottc/frames/commonModeFrame/component/LeftPanel.java +++ b/src/main/java/xyz/scottc/frames/commonModeFrame/component/LeftPanel.java @@ -11,9 +11,12 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; +import java.util.Objects; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -47,8 +50,10 @@ public LeftPanel(CommonModeFrame parent, FunctionPanel functionPanel, TopPanel t this.setLayout(new CommonModeTopPanelLayout()); this.add(this.importButton); + this.importButton.setToolTipText("Import the customized VD File which can be acquired by using \"Tools\" menu in the Main windows."); this.importButton.addActionListener(e -> this.importFile()); this.add(this.exportButton); + this.exportButton.setToolTipText("Export your answer report."); this.add(this.internalFileListLabel); this.add(this.internalFileListScrollPane); @@ -76,6 +81,7 @@ public void mouseClicked(MouseEvent e) { //backButton this.add(this.backButton); + this.backButton.setToolTipText("Go back to the Main windows."); this.backButton.addActionListener(e -> this.goBackToMainFrame()); } @@ -128,23 +134,6 @@ private void addExternalVocabularyPool() { } private void addInternalVocabularyPool() { - //create the InternalLibrary directory - File directory = FileUtils.getDirectoryFile(this); - File internalLibrary = new File(directory.getAbsolutePath() + "/InternalLibrary"); - if (internalLibrary.exists()) { - for (File file : internalLibrary.listFiles()) { - boolean success = file.delete(); - if (!success) { - System.out.println("File deleting in InternalLibrary Fail!"); - } - } - } else { - boolean success = internalLibrary.mkdir(); - if (!success) { - System.out.println("Creating InternalLibrary Fails!"); - } - } - //copy the internal json file to the InternalLibrary directory String jarPath = FileUtils.getJarFilePath(this); JarFile jarFile; @@ -157,16 +146,9 @@ private void addInternalVocabularyPool() { String innerPath = jarEntry.getName(); if (innerPath.startsWith(internalPath) && !innerPath.equals(internalPath)) { InputStream inputStream = this.getClass().getResourceAsStream("/" + innerPath); - String target = internalLibrary.getAbsolutePath() + innerPath.substring(28); - OutputStream outputStream = new FileOutputStream(target); - int length; - byte[] buffer = new byte[1024]; - while ((length = inputStream.read(buffer)) != -1) { - outputStream.write(buffer, 0, length); - } - outputStream.flush(); + String target = MainFrame.internalLibrary.getAbsolutePath() + innerPath.substring(28); + Files.copy(inputStream, Paths.get(target)); inputStream.close(); - outputStream.close(); } } } catch (IOException e) { @@ -174,7 +156,7 @@ private void addInternalVocabularyPool() { } //add all the file in InternalLibrary directory to list - for (File file : internalLibrary.listFiles()) { + for (File file : Objects.requireNonNull(MainFrame.internalLibrary.listFiles())) { this.internalVocabularyPool.add(file); this.internalFileListModel.addElement(file.getName()); } diff --git a/src/main/java/xyz/scottc/frames/mainFrame/MainFrame.java b/src/main/java/xyz/scottc/frames/mainFrame/MainFrame.java index d6bd148..da0f4d5 100644 --- a/src/main/java/xyz/scottc/frames/mainFrame/MainFrame.java +++ b/src/main/java/xyz/scottc/frames/mainFrame/MainFrame.java @@ -9,6 +9,7 @@ import java.awt.*; import java.awt.event.ActionListener; import java.io.File; +import java.util.Objects; public class MainFrame extends JFrame { @@ -32,6 +33,8 @@ public class MainFrame extends JFrame { public boolean isExternalLibraryExist = false; public static File externalLibrary; + public boolean isInternalLibraryExist = false; + public static File internalLibrary; public MainFrame(String title) throws HeadlessException { super(title); @@ -73,18 +76,44 @@ private void menuBarHandler() { this.inputToJson.addActionListener(this.inputToJsonListener); } + //Initialize the directories required for internal and external vocabularies list. private void initialize() { File directory = FileUtils.getDirectoryFile(this); - File[] files = directory.listFiles(); - externalLibrary = new File(directory.getAbsolutePath() + "/ExternalLibrary"); - for (File file : files) { - if (file.isDirectory() && "ExternalLibrary".equals(file.getName())) { - this.isExternalLibraryExist = true; + if (directory != null) { + File[] files = directory.listFiles(); + if (files != null) { + externalLibrary = new File(directory.getAbsolutePath() + "/ExternalLibrary"); + internalLibrary = new File(directory.getAbsolutePath() + "/InternalLibrary"); + for (File file : files) { + if (file.isDirectory() && "ExternalLibrary".equals(file.getName())) { + for (File subFile : Objects.requireNonNull(file.listFiles())) { + boolean success = subFile.delete(); + if (success) System.out.println("File deletion failed"); + } + this.isExternalLibraryExist = true; + } + if (file.isDirectory() && "InternalLibrary".equals(file.getName())) { + for (File subFile : Objects.requireNonNull(file.listFiles())) { + boolean success = subFile.delete(); + if (success) System.out.println("File deletion failed"); + } + this.isInternalLibraryExist = true; + } + } + if (!this.isExternalLibraryExist) { + boolean success = externalLibrary.mkdir(); + if (!success) { + System.out.println("Creating ExternalLibrary Fails!"); + } + } + if (!this.isInternalLibraryExist) { + boolean success = internalLibrary.mkdir(); + if (!success) { + System.out.println("Creating InternalLibrary Fails!"); + } + } } } - if (!this.isExternalLibraryExist) { - boolean success = externalLibrary.mkdir(); - } } private final ActionListener txtToJsonListener = e -> {