diff --git a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java index 9b426b5c8..250846b47 100644 --- a/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java +++ b/designer-base/src/main/java/com/fr/design/utils/TemplateUtils.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.SwingWorker; import java.io.OutputStream; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.function.Function; @@ -65,14 +66,7 @@ public class TemplateUtils { if (file == null) { return; } - Runnable doAfterCreateTemplate; - //判断一下要保存的文件是否已打开 - int index = HistoryTemplateListCache.getInstance().contains(file); - JTemplate template = null; - if (index != -1) { - template = HistoryTemplateListCache.getInstance().getHistoryList().get(index); - } - createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, template); + createAndOpenTemplate0(file, oldPath, createByEditingTemplate, openNewTemplate, null); } /** @@ -181,23 +175,29 @@ public class TemplateUtils { * @param template 需要关闭的模板 */ private static void openNewTemplateAndCloseOldTemplate(FILE file, boolean openNewTemplate, @Nullable JTemplate template) { - new SwingWorker() { + new SwingWorker>, Void>() { @Override - protected Boolean doInBackground() throws Exception { + protected List> doInBackground() throws Exception { + List> needCloseTemplate = new ArrayList<>(); + //判断一下要保存的副本文件是否已打开 + int index = HistoryTemplateListCache.getInstance().contains(file); + if (index != -1) { + WorkContext.getCurrent().get(TplOperator.class).closeAndFreeFile(file.getPath()); + needCloseTemplate.add(HistoryTemplateListCache.getInstance().getHistoryList().get(index)); + } if (JTemplate.isValid(template)) { //给要关闭的模板解锁 WorkContext.getCurrent().get(TplOperator.class).closeAndFreeFile(template.getPath()); - return true; + needCloseTemplate.add(template); } - return false; + return needCloseTemplate; } @Override protected void done() { try { - if (get()) { - //模板释放锁成功后关闭该模板 - HistoryTemplateListCache.getInstance().closeSelectedReport(template); - } + //获取需要关闭的模板 + List> jTemplates = get(); + jTemplates.forEach(jTemplate -> HistoryTemplateListCache.getInstance().closeSelectedReport(jTemplate)); if (openNewTemplate) { DesignerContext.getDesignerFrame().openTemplate(file); } diff --git a/designer-form/src/main/java/com/fr/design/widgettheme/LabelSettingPane.java b/designer-form/src/main/java/com/fr/design/widgettheme/LabelSettingPane.java index 0241b0100..4146ef684 100644 --- a/designer-form/src/main/java/com/fr/design/widgettheme/LabelSettingPane.java +++ b/designer-form/src/main/java/com/fr/design/widgettheme/LabelSettingPane.java @@ -38,6 +38,11 @@ public class LabelSettingPane extends BaseStyleSettingPane LabelTheme widgetTheme = (LabelTheme) t.getWidgetTheme(); if (widgetTheme == null) { widgetTheme = new LabelTheme(); + Label label = (Label) t; + if (!label.getDefaultFont().equals(label.getFont())) { + widgetTheme.setFollowTheme(false); + widgetTheme.setFontStyle(new FontStyle((label.getFont()))); + } t.setWidgetTheme(widgetTheme); } return widgetTheme; diff --git a/designer-realize/src/main/java/com/fr/start/DesignerSuperListener.java b/designer-realize/src/main/java/com/fr/start/DesignerSuperListener.java index ee4b26502..df62a3441 100644 --- a/designer-realize/src/main/java/com/fr/start/DesignerSuperListener.java +++ b/designer-realize/src/main/java/com/fr/start/DesignerSuperListener.java @@ -11,6 +11,7 @@ import com.fr.event.Event; import com.fr.event.Listener; import com.fr.event.Null; import com.fr.general.ComparatorUtils; +import com.fr.log.FineLoggerFactory; import com.fr.process.FineProcess; import com.fr.process.ProcessEventPipe; import com.fr.process.engine.core.FineProcessContext; @@ -37,7 +38,7 @@ public class DesignerSuperListener { private final ScheduledExecutorService service = Executors.newScheduledThreadPool(2, new NamedThreadFactory("DesignerListener")); private final ExecutorService helpService = Executors.newSingleThreadExecutor( new NamedThreadFactory("DesignerSuperListener-Help")); - + private final ScheduledExecutorService EXIT_SERVICE = Executors.newSingleThreadScheduledExecutor( new NamedThreadFactory("DesignerSuperListener-Exit")); private FineProcess process; private ScheduledFuture fixedFuture; private ScheduledFuture onceFuture; @@ -141,6 +142,11 @@ public class DesignerSuperListener { } private void fallBackReport() { + // 60S都没退出去就强制关闭 + EXIT_SERVICE.schedule(() -> { + FineLoggerFactory.getLogger().error("[DesignerSuperListener] The designer failed to exit gracefully, attempting a forced shutdown."); + System.exit(1); + }, 60, TimeUnit.SECONDS); DesignUtils.initLookAndFeel(); StartErrorMessageCollector.getInstance().record(DesignerErrorMessage.UNEXCEPTED_FALL_BACK.getId(), DesignerErrorMessage.UNEXCEPTED_FALL_BACK.getMessage(),