diff --git a/designer-base/src/main/java/com/fr/design/jxbrowser/JxEngine.java b/designer-base/src/main/java/com/fr/design/jxbrowser/JxEngine.java index bb2c1f7375..7738082a4c 100644 --- a/designer-base/src/main/java/com/fr/design/jxbrowser/JxEngine.java +++ b/designer-base/src/main/java/com/fr/design/jxbrowser/JxEngine.java @@ -3,8 +3,10 @@ package com.fr.design.jxbrowser; import com.fr.design.DesignerEnvManager; import com.fr.design.ui.ModernUIConstants; import com.fr.log.FineLoggerFactory; +import com.fr.stable.CommonUtils; import com.fr.value.ClearableLazyValue; import com.fr.web.struct.AssembleComponent; +import com.teamdev.jxbrowser.engine.ChromiumBinariesExtractionException; import com.teamdev.jxbrowser.engine.Engine; import com.teamdev.jxbrowser.engine.EngineOptions; import com.teamdev.jxbrowser.engine.RenderingMode; @@ -12,8 +14,11 @@ import com.teamdev.jxbrowser.engine.event.EngineCrashed; import com.teamdev.jxbrowser.net.Network; import com.teamdev.jxbrowser.net.Scheme; import com.teamdev.jxbrowser.net.callback.VerifyCertificateCallback; +import com.teamdev.jxbrowser.os.Environment; import org.jetbrains.annotations.NotNull; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Collections; import java.util.Map; @@ -41,7 +46,18 @@ public class JxEngine { .addSwitch("--disable-google-traffic") .addScheme(Scheme.of(ModernUIConstants.EMB_TAG), new NxInterceptRequestCallback(this::getComponent, this::getParameterMap)); - Engine engine = Engine.newInstance(builder.build()); + Engine engine; + try { + engine = Engine.newInstance(builder.build()); + } catch (ChromiumBinariesExtractionException e) { + Path chromiumDir = Paths.get(System.getProperty("jxbrowser.chromium.dir", Environment.defaultChromiumDir().toString())); + if (CommonUtils.deleteFile(chromiumDir.toFile())) { + FineLoggerFactory.getLogger().warn("[jxbrowser]Retry start engine success after delete chromium dir manually: {}", chromiumDir); + engine = Engine.newInstance(builder.build()); + } else { + throw e; + } + } engine.on(EngineCrashed.class, (event) -> { FineLoggerFactory.getLogger().error("jxBrowser engine crashed with exitCode: {}", event.exitCode()); event.engine().close(); diff --git a/designer-realize/src/main/java/com/fr/design/dscolumn/SelectedDataColumnPane.java b/designer-realize/src/main/java/com/fr/design/dscolumn/SelectedDataColumnPane.java index de10613835..421bfdb766 100644 --- a/designer-realize/src/main/java/com/fr/design/dscolumn/SelectedDataColumnPane.java +++ b/designer-realize/src/main/java/com/fr/design/dscolumn/SelectedDataColumnPane.java @@ -21,6 +21,7 @@ import com.fr.design.mainframe.ElementCasePane; import com.fr.design.utils.gui.UIComponentUtils; import com.fr.design.widget.FRWidgetFactory; import com.fr.general.data.TableDataColumn; +import com.fr.log.FineLoggerFactory; import com.fr.report.cell.CellElement; import com.fr.report.cell.TemplateCellElement; import com.fr.report.cell.cellattr.core.group.DSColumn; @@ -373,13 +374,33 @@ public class SelectedDataColumnPane extends BasicPane { update(SelectedDataColumnPane.this.cellElement); casePane.fireTargetModified(); } + @Override + public void doCancel() { + editorPane.stopEditing(); + } }); - editorPane.populate(ps == null ? new Parameter[0] : ps); + editorPane.populate(ps == null ? new Parameter[0] : cloneParameterList(ps)); paramDialog.setVisible(true); } }); } + private Parameter[] cloneParameterList(Parameter[] parameters) { + if (parameters == null) { + return null; + } + try { + Parameter[] cloneParameterList = new Parameter[parameters.length]; + for (int i = 0; i < parameters.length; i++) { + cloneParameterList[i] = (Parameter) parameters[i].clone(); + } + return cloneParameterList; + } catch (CloneNotSupportedException e) { + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + return null; + } + private boolean isColumnName(String columnExp) { return StringUtils.isNotBlank(columnExp) && (columnExp.length() > 0 && columnExp.charAt(0) == '#') && !columnExp.endsWith("#"); @@ -397,8 +418,7 @@ public class SelectedDataColumnPane extends BasicPane { public Dimension getPreferredSize() { if (this.isVisible()) { return super.getPreferredSize(); - } - else { + } else { return new Dimension(); } }