From adc4040cc84162d01eec5dd6a336b83d75aaa4d7 Mon Sep 17 00:00:00 2001 From: zhangmeng <1334717033@qq.com> Date: Sat, 2 Sep 2023 11:14:57 +0800 Subject: [PATCH] =?UTF-8?q?2023=E5=B9=B49=E6=9C=882=E6=97=A511:14:42?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/controller/HomeController.java | 4 + .../controller/LogConsoleController.java | 130 ++++++++++++++++++ .../controller/SmallToolsController.java | 24 ++++ .../zhangmeng/tools/utils/ResourcesUtils.java | 2 +- src/main/resources/fxml/home.fxml | 1 + src/main/resources/fxml/log-console.fxml | 17 +++ 6 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/zhangmeng/tools/controller/LogConsoleController.java create mode 100644 src/main/resources/fxml/log-console.fxml diff --git a/src/main/java/com/zhangmeng/tools/controller/HomeController.java b/src/main/java/com/zhangmeng/tools/controller/HomeController.java index 35eb245..7798553 100644 --- a/src/main/java/com/zhangmeng/tools/controller/HomeController.java +++ b/src/main/java/com/zhangmeng/tools/controller/HomeController.java @@ -606,4 +606,8 @@ public class HomeController implements Serializable { public void layui_form_gen_menu_item(ActionEvent actionEvent) { load_small_tools(17); } + + public void log_console_menu_item(ActionEvent actionEvent) { + load_small_tools(18); + } } \ No newline at end of file diff --git a/src/main/java/com/zhangmeng/tools/controller/LogConsoleController.java b/src/main/java/com/zhangmeng/tools/controller/LogConsoleController.java new file mode 100644 index 0000000..4709fd0 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/controller/LogConsoleController.java @@ -0,0 +1,130 @@ +package com.zhangmeng.tools.controller; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.LineHandler; +import cn.hutool.core.io.file.Tailer; +import cn.hutool.core.lang.Console; +import com.sun.javafx.PlatformUtil; +import com.zhangmeng.tools.utils.AlertUtils; +import javafx.application.Platform; +import javafx.beans.property.SimpleListProperty; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import javafx.scene.text.Font; +import lombok.extern.slf4j.Slf4j; + +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.List; + +@Slf4j +public class LogConsoleController { + + @FXML + public TextArea console_show; + + @FXML + private TextField log_path; + + @FXML + private Button start_read; + + private Tailer tailer; + + private static final ObservableList list = FXCollections.observableArrayList(); + + @FXML + public void initialize() { + + console_show.setFont(Font.font("微软雅黑",14)); + new Thread(()->{ + list.addListener(new ListChangeListener() { + @Override + public void onChanged(Change c) { + while (c.next()){ + if (c.wasAdded()){ + List addedSubList = c.getAddedSubList(); + if (addedSubList.size()>0){ + String line = addedSubList.get(0); + Platform.runLater(()->{ + console_show.appendText(System.lineSeparator()); + console_show.appendText(line); + console_show.setScrollLeft(0); + }); + } + } + } + } + }); + }).start(); + + + log_path.textProperty().addListener(new ChangeListener() { + @Override + public void changed(ObservableValue observable, String oldValue, String newValue) { + if (newValue != null && !newValue.equals("")){ + log.info("log_path ==" + log_path.getText()); + //重新加载日志 + if (tailer != null){ + tailer.stop(); + start_read(); + } + } + } + }); + start_read.setOnAction(event -> { + start_read(); + }); + } + + public void start_read(){ + if (log_path.getText().length() == 0){ + AlertUtils.alert_warning("日志路径不能为空!"); + return; + } + File file = FileUtil.file(log_path.getText()); + + String file_content = null; + try { + file_content = Files.readString(file.toPath(), StandardCharsets.UTF_8); + } catch (IOException e) { + try { + file_content = Files.readString(file.toPath(), Charset.forName("GBK")); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + console_show.setText(file_content); + console_show.appendText(System.lineSeparator()); + console_show.setScrollLeft(0); + new Thread(()->{ + LineHandler CONSOLE_HANDLER = new ConsoleLineHandler(); + tailer = new Tailer(file, CONSOLE_HANDLER, 2); + tailer.start(); + }).start(); + } + + /** + * 命令行打印的行处理器 + * + * @author looly + * @since 4.5.2 + */ + public static class ConsoleLineHandler implements LineHandler { + @Override + public void handle(String line) { + list.add(line); + } + } +} diff --git a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java index d240114..25ec14c 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java @@ -85,6 +85,7 @@ public class SmallToolsController { private AnchorPane capter_screen; private AnchorPane file_edit; private AnchorPane layui_form_gen; + private AnchorPane log_console; @FXML private ListView listView; @@ -424,10 +425,32 @@ public class SmallToolsController { } layui_form_gen(flag); } + if (newValue.getIndex() == 18) { + if (log_console != null) { + flag = true; + } + log_console(flag); + } } }); } + private void log_console(boolean flag) { + //默认选择第一个 + listView.getSelectionModel().select(18); + if (!flag) { + try { + root = FXMLLoader.load(ResourcesUtils.getResource("log-console")); + } catch (IOException e) { + e.printStackTrace(); + } + log_console = root; + } else { + root = log_console; + } + common_method(); + } + private void layui_form_gen(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(17); @@ -482,6 +505,7 @@ public class SmallToolsController { case Capter_Screent -> new Image("image/截图.png"); case File_Edit -> new Image("image/编辑.png"); case LayUI_Form_Gen -> new Image("image/layui.png"); + case LogConsole -> new Image("image/layui.png"); }; } diff --git a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java index 1a585d4..e42c526 100644 --- a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java +++ b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java @@ -26,7 +26,6 @@ package com.zhangmeng.tools.utils; import javafx.scene.image.Image; -import javafx.scene.layout.AnchorPane; import java.net.URL; @@ -134,6 +133,7 @@ public class ResourcesUtils { Capter_Screent("截图", 15), File_Edit("文件编辑器", 16), LayUI_Form_Gen("layui-from 表单生成", 17), + LogConsole("日志输出", 18), ; SmallTools(String title, int index) { diff --git a/src/main/resources/fxml/home.fxml b/src/main/resources/fxml/home.fxml index a49f155..7744cc7 100644 --- a/src/main/resources/fxml/home.fxml +++ b/src/main/resources/fxml/home.fxml @@ -51,6 +51,7 @@ + diff --git a/src/main/resources/fxml/log-console.fxml b/src/main/resources/fxml/log-console.fxml new file mode 100644 index 0000000..82f9a27 --- /dev/null +++ b/src/main/resources/fxml/log-console.fxml @@ -0,0 +1,17 @@ + + + + + + + + + + +