diff --git a/designer-base/src/main/java/com/fr/env/detect/base/DetectorBridge.java b/designer-base/src/main/java/com/fr/env/detect/base/DetectorBridge.java index 50bca7fd1c..798e0ae047 100644 --- a/designer-base/src/main/java/com/fr/env/detect/base/DetectorBridge.java +++ b/designer-base/src/main/java/com/fr/env/detect/base/DetectorBridge.java @@ -10,6 +10,7 @@ import com.fr.env.detect.impl.JarInconsistentDetector; import com.fr.env.detect.impl.JarLackDetector; import com.fr.env.detect.thowable.ThrowableLogAppender; import com.fr.env.detect.thowable.ThrowableStore; +import com.fr.log.FineLoggerFactory; import com.fr.value.NotNullLazyValue; import org.jetbrains.annotations.NotNull; @@ -86,7 +87,13 @@ public class DetectorBridge { @NotNull public DetectorResult detect(DetectorType type) { - return detectorManager.getValue().detect(type); + try { + return detectorManager.getValue().detect(type); + } catch (Exception e) { + FineLoggerFactory.getLogger().error("detect failed", e); + // 返回未知错误信息 + return DetectorResult.unknown(type); + } } /** diff --git a/designer-base/src/main/java/com/fr/env/detect/bean/DetectorResult.java b/designer-base/src/main/java/com/fr/env/detect/bean/DetectorResult.java index 2b45ecbc1e..aa9a007bbb 100644 --- a/designer-base/src/main/java/com/fr/env/detect/bean/DetectorResult.java +++ b/designer-base/src/main/java/com/fr/env/detect/bean/DetectorResult.java @@ -31,6 +31,12 @@ public class DetectorResult { this.log = log; } + public static DetectorResult unknown(DetectorType type) { + DetectorResult result = new DetectorResult(type); + result.status = DetectorStatus.UNKNOWN; + return result; + } + public static DetectorResult normal(DetectorType type) { DetectorResult result = new DetectorResult(type); diff --git a/designer-base/src/main/java/com/fr/env/detect/bean/DetectorStatus.java b/designer-base/src/main/java/com/fr/env/detect/bean/DetectorStatus.java index 6a12015e91..b7e5df818c 100644 --- a/designer-base/src/main/java/com/fr/env/detect/bean/DetectorStatus.java +++ b/designer-base/src/main/java/com/fr/env/detect/bean/DetectorStatus.java @@ -14,4 +14,9 @@ public enum DetectorStatus { * 异常 */ EXCEPTION, + + /** + * 未知 + */ + UNKNOWN, } diff --git a/designer-base/src/main/java/com/fr/env/detect/impl/JarInconsistentDetector.java b/designer-base/src/main/java/com/fr/env/detect/impl/JarInconsistentDetector.java index 8cfc988a95..2a744046a1 100644 --- a/designer-base/src/main/java/com/fr/env/detect/impl/JarInconsistentDetector.java +++ b/designer-base/src/main/java/com/fr/env/detect/impl/JarInconsistentDetector.java @@ -136,7 +136,7 @@ public class JarInconsistentDetector extends AbstractExceptionDetector { return DetectorResult.exception(type(), new ExceptionTips(new Message.Simple(tipsMessage)), new ExceptionSolution(new Message.Link(Toolkit.i18nText(type().getSolutionLocale()), DetectorConstants.JAR_HELP_LINK), null), - ExceptionLog.create(type().getLogLocale() + message)); + ExceptionLog.create(Toolkit.i18nText(type().getLogLocale()) + message)); } private Map groupBy(List localInfos) { diff --git a/designer-base/src/main/java/com/fr/env/detect/thowable/ThrowableLogAppender.java b/designer-base/src/main/java/com/fr/env/detect/thowable/ThrowableLogAppender.java index bcb4736e1d..3348052f4d 100644 --- a/designer-base/src/main/java/com/fr/env/detect/thowable/ThrowableLogAppender.java +++ b/designer-base/src/main/java/com/fr/env/detect/thowable/ThrowableLogAppender.java @@ -60,6 +60,8 @@ public class ThrowableLogAppender extends AbstractAppender { public void enable() { + // 初始化一下,别出问题 + logHandler.getHandler().start(); FRLogger.getLogger().addExtendLogAppender(logHandler); } diff --git a/designer-base/src/main/java/com/fr/env/detect/ui/DetectorErrorDialog.java b/designer-base/src/main/java/com/fr/env/detect/ui/DetectorErrorDialog.java index 43a2f00b9d..e636524c87 100644 --- a/designer-base/src/main/java/com/fr/env/detect/ui/DetectorErrorDialog.java +++ b/designer-base/src/main/java/com/fr/env/detect/ui/DetectorErrorDialog.java @@ -7,6 +7,7 @@ import com.fr.design.gui.ilable.UILabel; import com.fr.design.i18n.Toolkit; import com.fr.design.layout.FRGUIPaneFactory; import com.fr.design.utils.ColorUtils; +import com.fr.design.utils.DesignUtils; import com.fr.design.utils.gui.GUICoreUtils; import com.fr.env.detect.base.DetectorUtil; import com.fr.env.detect.bean.DetectorResult; @@ -14,7 +15,6 @@ import com.fr.env.detect.bean.ExceptionSolution; import com.fr.env.detect.bean.ExceptionTips; import com.fr.env.detect.bean.Message; import com.fr.exit.DesignerExiter; -import com.fr.general.FRFont; import javax.swing.BorderFactory; import javax.swing.JDialog; @@ -39,13 +39,17 @@ import java.util.List; * created by Harrison on 2022/05/29 **/ public class DetectorErrorDialog extends JDialog implements ActionListener { - + + public static final float FONT_BOLD_HEIGHT = 16f; private UIButton okButton; private UIButton restartButton; public DetectorErrorDialog(Frame parent, List results) { super(parent, true); + + // 可能是还没初始化 UI 的时候出现的问题,初始化一下 UI + DesignUtils.initLookAndFeel(); JPanel northPane = FRGUIPaneFactory.createBorderLayout_L_Pane(); JPanel headerPane = FRGUIPaneFactory.createBorderLayout_S_Pane(); @@ -57,8 +61,9 @@ public class DetectorErrorDialog extends JDialog implements ActionListener { JPanel messagePane = FRGUIPaneFactory.createVerticalFlowLayout_S_Pane(true); { UILabel boldHeader = new UILabel(Toolkit.i18nText("Fine-Design_Error_Start_Apology_Message")); - Font font = FRFont.getInstance(boldHeader.getFont().getFontName(), Font.PLAIN, 16); - boldHeader.setFont(font); + Font font = boldHeader.getFont(); + Font boldFont = font.deriveFont(FONT_BOLD_HEIGHT); + boldHeader.setFont(boldFont); messagePane.add(boldHeader); UILabel description = new UILabel(Toolkit.i18nText("Fine-Design_Send_Report_To_Us")); diff --git a/designer-base/src/main/java/com/fr/env/detect/ui/EnvDetectorDialog.java b/designer-base/src/main/java/com/fr/env/detect/ui/EnvDetectorDialog.java index 25689ad202..ed03d78cc1 100644 --- a/designer-base/src/main/java/com/fr/env/detect/ui/EnvDetectorDialog.java +++ b/designer-base/src/main/java/com/fr/env/detect/ui/EnvDetectorDialog.java @@ -21,6 +21,7 @@ import com.fr.env.detect.base.EnvDetectorConfig; import com.fr.env.detect.bean.DetectorResult; import com.fr.env.detect.bean.DetectorStatus; import com.fr.env.detect.bean.DetectorType; +import com.fr.log.FineLoggerFactory; import org.jetbrains.annotations.NotNull; import javax.swing.BorderFactory; @@ -55,6 +56,7 @@ public class EnvDetectorDialog extends JDialog { private static final int TIMEOUT = 1000; private static final Color SUCCESS_COLOR = new Color(22, 193, 83); + private static final Color DETAIL_FONT_COLOR = new Color(65, 155, 249); private final JPanel body; @@ -177,7 +179,7 @@ public class EnvDetectorDialog extends JDialog { } // 执行前 buttonStatus = buttonStatus.next(); - UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refreshHeaderPanel); + UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refreshHeader); detectWorker = new SwingWorker() { @Override @@ -192,7 +194,7 @@ public class EnvDetectorDialog extends JDialog { } // 刷新一下面板-开始执行啦 - UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refresh); + UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refreshBody); EnvDetectorItem item = items.get(i); DetectorType type = item.getType(); @@ -208,7 +210,7 @@ public class EnvDetectorDialog extends JDialog { // 只有还在运行中,才会真正的刷新面板 if (buttonStatus.isExecuting()) { // 在刷新一下面板 - UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refresh); + UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refreshBody); currentDetectIndex++; } @@ -218,11 +220,16 @@ public class EnvDetectorDialog extends JDialog { @Override protected void done() { - - if (buttonStatus.isExecuting()) { - // 执行结束 - buttonStatus = EnvDetectorButtonStatus.A_NEW; - UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refreshHeaderPanel); + + try { + this.get(); + if (buttonStatus.isExecuting()) { + // 执行结束 + buttonStatus = EnvDetectorButtonStatus.A_NEW; + UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refreshHeader); + } + } catch (Exception e) { + FineLoggerFactory.getLogger().error("detect failed", e); } } }; @@ -236,7 +243,7 @@ public class EnvDetectorDialog extends JDialog { e.setResult(null); } // 刷新一下面板-开始执行啦 - UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refresh); + UIUtil.invokeLaterIfNeeded(EnvDetectorDialog.this::refreshBody); } private void stopDetecting(UIButton detectButton) { @@ -251,7 +258,7 @@ public class EnvDetectorDialog extends JDialog { // 刷新按钮 detectButton.setText(buttonStatus.getDesc()); // 刷新面板 - refresh(); + refreshBody(); }); } @@ -265,7 +272,7 @@ public class EnvDetectorDialog extends JDialog { this.resultSummaryPane.setLayout(new BorderLayout(5, 0)); Boolean success = model.getResults() .map((e) -> { - if (e.getStatus() == DetectorStatus.NORMAL) { + if (e != null && e.getStatus() == DetectorStatus.NORMAL) { return Boolean.TRUE; } return Boolean.FALSE; @@ -360,31 +367,34 @@ public class EnvDetectorDialog extends JDialog { infoPanel.add(new UILabel(Toolkit.i18nText("Fine-Design_Basic_Exception")), BorderLayout.CENTER); } statusPanel.add(infoPanel, BorderLayout.WEST); - - JPanel detailPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); - { - detailPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); - UILabel detailLabel = new UILabel(Toolkit.i18nText("Fine_Designer_Look_Detail")); - detailLabel.setForeground(new Color(65, 155, 249)); - detailLabel.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent mouseEvent) { - NotificationDialogProperties properties = new NotificationDialogProperties((Frame) EnvDetectorDialog.this.getOwner(), Toolkit.i18nText("Fine-Design_Basic_Detect_Notification_Title")); - Stream results = model.getResults(); - List notificationModels = results - .filter(Objects::nonNull) - .filter((e) -> e.getStatus() == DetectorStatus.EXCEPTION) - .map(DetectorUtil::convert2Notification) - .collect(Collectors.toList()); - - NotificationDialog dialog = new NotificationDialog(properties, notificationModels); - dialog.open(); - } - }); - detailPanel.add(detailLabel, BorderLayout.CENTER); + + // 如果结果是检测出的异常,则出现详细信息。 + if (result.getStatus() == DetectorStatus.EXCEPTION) { + JPanel detailPanel = FRGUIPaneFactory.createBorderLayout_S_Pane(); + { + detailPanel.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 0)); + UILabel detailLabel = new UILabel(Toolkit.i18nText("Fine_Designer_Look_Detail")); + detailLabel.setForeground(DETAIL_FONT_COLOR); + detailLabel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent mouseEvent) { + NotificationDialogProperties properties = new NotificationDialogProperties((Frame) EnvDetectorDialog.this.getOwner(), Toolkit.i18nText("Fine-Design_Basic_Detect_Notification_Title")); + Stream results = model.getResults(); + List notificationModels = results + .filter(Objects::nonNull) + .filter((e) -> e.getStatus() == DetectorStatus.EXCEPTION) + .map(DetectorUtil::convert2Notification) + .collect(Collectors.toList()); + + NotificationDialog dialog = new NotificationDialog(properties, notificationModels); + dialog.open(); + } + }); + detailPanel.add(detailLabel, BorderLayout.CENTER); + } + statusPanel.add(detailPanel, BorderLayout.CENTER); } - statusPanel.add(detailPanel, BorderLayout.CENTER); } return statusPanel; } @@ -434,14 +444,14 @@ public class EnvDetectorDialog extends JDialog { return tailPanel; } - private void refreshHeaderPanel() { + private void refreshHeader() { updateHeaderPanel(); pack(); repaint(); } - private void refresh() { + private void refreshBody() { updateTable(this.tablePanel); pack();