Browse Source

REPORT-5518 [9.0三轮回归]jdk1.7的设计器起不来

master
vito 7 years ago
parent
commit
0dfdf66a89
  1. 45
      designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java
  2. 41
      designer/src/com/fr/start/Designer.java
  3. 2
      designer_base/src/com/fr/design/extra/LoginWebBridge.java
  4. 19
      designer_base/src/com/fr/design/extra/PluginWebBridge.java
  5. 6
      designer_base/src/com/fr/design/extra/ShopManagerPane.java
  6. 44
      designer_base/src/com/fr/design/extra/WebViewDlgHelper.java

45
designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java

@ -7,7 +7,11 @@ import com.fr.base.ConfigManager;
import com.fr.base.FRContext; import com.fr.base.FRContext;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.bbs.BBSLoginUtils; import com.fr.design.bbs.BBSLoginUtils;
import com.fr.design.extra.*; import com.fr.design.extra.LoginContextListener;
import com.fr.design.extra.LoginWebBridge;
import com.fr.design.extra.PluginWebBridge;
import com.fr.design.extra.UserLoginContext;
import com.fr.design.extra.WebViewDlgHelper;
import com.fr.design.gui.ilable.UILabel; import com.fr.design.gui.ilable.UILabel;
import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIMenuItem;
import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIPopupMenu;
@ -18,17 +22,28 @@ import com.fr.general.DateUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.SiteCenter; import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
import com.fr.stable.*; import com.fr.stable.EncodeConstants;
import com.fr.stable.OperatingSystem;
import javax.swing.*; import com.fr.stable.StringUtils;
import java.awt.*; import net.sf.ehcache.util.NamedThreadFactory;
import javax.swing.SwingConstants;
import java.awt.Cursor;
import java.awt.Desktop;
import java.awt.Frame;
import java.awt.event.MouseAdapter; import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.net.URI; import java.net.URI;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* @author neil * @author neil
@ -104,8 +119,12 @@ public class UserInfoLabel extends UILabel {
* showBBSDialog 弹出BBS资讯框 * showBBSDialog 弹出BBS资讯框
*/ */
public static void showBBSDialog() { public static void showBBSDialog() {
Thread showBBSThread = new Thread(new Runnable() { ThreadFactory namedThread = new NamedThreadFactory("bbs-dlg");
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1), namedThread);
threadPoolExecutor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
// vito:最新mac10.12和javafx弹出框初始化时会有大几率卡死在native方法,这里先屏蔽一下。 // vito:最新mac10.12和javafx弹出框初始化时会有大几率卡死在native方法,这里先屏蔽一下。
@ -127,18 +146,20 @@ public class UserInfoLabel extends UILabel {
return; return;
} }
String res = hc.getResponseText(); String res = hc.getResponseText();
if (res.indexOf(BBSConstants.UPDATE_KEY) == -1) { if (!res.contains(BBSConstants.UPDATE_KEY)) {
return; return;
} }
try { try {
BBSDialog bbsLabel = new BBSDialog(DesignerContext.getDesignerFrame()); Class<?> clazz = Class.forName("com.fr.design.mainframe.bbs.BBSDialog");
bbsLabel.showWindow(SiteCenter.getInstance().acquireUrlByKind("bbs.popup")); Constructor constructor = clazz.getConstructor(Frame.class);
Object instance = constructor.newInstance(DesignerContext.getDesignerFrame());
Method showWindow = clazz.getMethod("showWindow", String.class);
showWindow.invoke(instance, SiteCenter.getInstance().acquireUrlByKind("bbs.popup"));
DesignerEnvManager.getEnvManager().setLastShowBBSNewsTime(DateUtils.DATEFORMAT2.format(new Date())); DesignerEnvManager.getEnvManager().setLastShowBBSNewsTime(DateUtils.DATEFORMAT2.format(new Date()));
} catch (Throwable e) { } catch (Throwable ignored) {
} }
} }
}); });
showBBSThread.start();
} }
private void sleep(long millis) { private void sleep(long millis) {

41
designer/src/com/fr/start/Designer.java

@ -20,7 +20,12 @@ import com.fr.design.gui.ibutton.UIPreviewButton;
import com.fr.design.gui.imenu.UIMenuItem; import com.fr.design.gui.imenu.UIMenuItem;
import com.fr.design.gui.imenu.UIPopupMenu; import com.fr.design.gui.imenu.UIPopupMenu;
import com.fr.design.gui.itoolbar.UILargeToolbar; import com.fr.design.gui.itoolbar.UILargeToolbar;
import com.fr.design.mainframe.*; import com.fr.design.mainframe.ActiveKeyGenerator;
import com.fr.design.mainframe.BaseJForm;
import com.fr.design.mainframe.DesignerContext;
import com.fr.design.mainframe.InformationCollector;
import com.fr.design.mainframe.JTemplate;
import com.fr.design.mainframe.JWorkBook;
import com.fr.design.mainframe.alphafine.component.AlphaFinePane; import com.fr.design.mainframe.alphafine.component.AlphaFinePane;
import com.fr.design.mainframe.bbs.UserInfoLabel; import com.fr.design.mainframe.bbs.UserInfoLabel;
import com.fr.design.mainframe.bbs.UserInfoPane; import com.fr.design.mainframe.bbs.UserInfoPane;
@ -37,16 +42,24 @@ import com.fr.general.Inter;
import com.fr.stable.ProductConstants; import com.fr.stable.ProductConstants;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
import com.fr.stable.web.ServletContext;
import com.fr.stable.xml.XMLTools; import com.fr.stable.xml.XMLTools;
import net.sf.ehcache.util.NamedThreadFactory;
import javax.swing.*; import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.border.MatteBorder; import javax.swing.border.MatteBorder;
import java.awt.*; import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Designer extends BaseDesigner { public class Designer extends BaseDesigner {
private static final int TOOLBARPANEVGAP = -4; private static final int TOOLBARPANEVGAP = -4;
@ -147,6 +160,7 @@ public class Designer extends BaseDesigner {
private JPanel generateEmptyGap(final int width) { private JPanel generateEmptyGap(final int width) {
JPanel panel = new JPanel() { JPanel panel = new JPanel() {
@Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
Dimension dim = super.getPreferredSize(); Dimension dim = super.getPreferredSize();
dim.width = width; dim.width = width;
@ -163,6 +177,7 @@ public class Designer extends BaseDesigner {
* *
* @return 按钮 * @return 按钮
*/ */
@Override
public UIButton[] createUp() { public UIButton[] createUp() {
return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()}; return new UIButton[]{createSaveButton(), createUndoButton(), createRedoButton()};
} }
@ -218,10 +233,12 @@ public class Designer extends BaseDesigner {
private void createRunButton(UILargeToolbar largeToolbar) { private void createRunButton(UILargeToolbar largeToolbar) {
run = new UIPreviewButton(new UIButton(UIConstants.PAGE_BIG_ICON) { run = new UIPreviewButton(new UIButton(UIConstants.PAGE_BIG_ICON) {
@Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return new Dimension(34, 34); return new Dimension(34, 34);
} }
}, new UIButton(UIConstants.PREVIEW_DOWN) { }, new UIButton(UIConstants.PREVIEW_DOWN) {
@Override
public Dimension getPreferredSize() { public Dimension getPreferredSize() {
return new Dimension(34, 10); return new Dimension(34, 10);
} }
@ -296,6 +313,7 @@ public class Designer extends BaseDesigner {
* @param plus 对象 * @param plus 对象
* @return 更新后的toolbar * @return 更新后的toolbar
*/ */
@Override
public JComponent resetToolBar(JComponent toolbarComponent, ToolBarMenuDockPlus plus) { public JComponent resetToolBar(JComponent toolbarComponent, ToolBarMenuDockPlus plus) {
//如果是处于权限编辑状态 //如果是处于权限编辑状态
if (BaseUtils.isAuthorityEditing()) { if (BaseUtils.isAuthorityEditing()) {
@ -339,6 +357,7 @@ public class Designer extends BaseDesigner {
* *
* @return 面板组件 * @return 面板组件
*/ */
@Override
public Component createBBSLoginPane() { public Component createBBSLoginPane() {
if (userInfoPane == null) { if (userInfoPane == null) {
userInfoPane = new UserInfoPane(); userInfoPane = new UserInfoPane();
@ -351,11 +370,13 @@ public class Designer extends BaseDesigner {
* *
* @return 面板组件 * @return 面板组件
*/ */
@Override
public Component createAlphaFinePane() { public Component createAlphaFinePane() {
return AlphaFinePane.getAlphaFinePane(); return AlphaFinePane.getAlphaFinePane();
} }
@Override
protected SplashPane createSplashPane() { protected SplashPane createSplashPane() {
return new ReportSplashPane(); return new ReportSplashPane();
} }
@ -363,6 +384,7 @@ public class Designer extends BaseDesigner {
/** /**
* 收集用户信息吗 * 收集用户信息吗
*/ */
@Override
protected void collectUserInformation() { protected void collectUserInformation() {
//定制的就不弹出来了 //定制的就不弹出来了
if (!ComparatorUtils.equals(ProductConstants.APP_NAME, ProductConstants.DEFAULT_APP_NAME)) { if (!ComparatorUtils.equals(ProductConstants.APP_NAME, ProductConstants.DEFAULT_APP_NAME)) {
@ -395,14 +417,18 @@ public class Designer extends BaseDesigner {
int status = envManager.getActiveKeyStatus(); int status = envManager.getActiveKeyStatus();
//没有联网验证过 //没有联网验证过
if (status != 0) { if (status != 0) {
Thread authThread = new Thread(new Runnable() { ThreadFactory namedThread = new NamedThreadFactory("net-verify");
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
1, 1,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1),
namedThread);
threadPoolExecutor.execute(new Runnable() {
@Override @Override
public void run() { public void run() {
ActiveKeyGenerator.onLineVerify(key); ActiveKeyGenerator.onLineVerify(key);
} }
}); });
authThread.start();
} }
} }
@ -443,6 +469,7 @@ public class Designer extends BaseDesigner {
/** /**
* 设计器退出时, 做的一些操作. * 设计器退出时, 做的一些操作.
*/ */
@Override
public void shutDown() { public void shutDown() {
InformationCollector collector = InformationCollector.getInstance(); InformationCollector collector = InformationCollector.getInstance();
collector.collectStopTime(); collector.collectStopTime();

2
designer_base/src/com/fr/design/extra/LoginWebBridge.java

@ -92,7 +92,7 @@ public class LoginWebBridge {
return messageCount; return messageCount;
} }
public void setQqDialog(UIDialog qqDialog) { public void setQQDialog(UIDialog qqDialog) {
closeQQWindow(); closeQQWindow();
this.qqDialog = qqDialog; this.qqDialog = qqDialog;
} }

19
designer_base/src/com/fr/design/extra/PluginWebBridge.java

@ -27,7 +27,9 @@ import javafx.concurrent.Task;
import javafx.scene.web.WebEngine; import javafx.scene.web.WebEngine;
import javafx.stage.FileChooser; import javafx.stage.FileChooser;
import javafx.stage.Stage; import javafx.stage.Stage;
import net.sf.ehcache.util.NamedThreadFactory;
import netscape.javascript.JSObject; import netscape.javascript.JSObject;
import javax.swing.JDialog; import javax.swing.JDialog;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.SwingUtilities; import javax.swing.SwingUtilities;
@ -41,25 +43,34 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/** /**
* 开放给Web组件的接口,用于安装,卸载,更新以及更改插件可用状态 * 开放给Web组件的接口,用于安装,卸载,更新以及更改插件可用状态
*/ */
public class PluginWebBridge { public class PluginWebBridge {
private static final String PREFIX = "pluginbridge-pool";
private static final String ACTION = "action";
private static final String KEYWORD = "keyword";
private static final int COREPOOLSIZE = 3;
private static final int MAXPOOLSIZE = 5;
private static PluginWebBridge helper; private static PluginWebBridge helper;
private UIDialog uiDialog; private UIDialog uiDialog;
private ACTIONS action; private ACTIONS action;
private String ACTION = "action";
private String KEYWORD = "keyword";
private Map<String, Object> config; private Map<String, Object> config;
private WebEngine webEngine; private WebEngine webEngine;
private UILabel uiLabel; private UILabel uiLabel;
private ExecutorService threadPoolExecutor = Executors.newSingleThreadExecutor(); private ExecutorService threadPoolExecutor = new ThreadPoolExecutor(COREPOOLSIZE, MAXPOOLSIZE,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(COREPOOLSIZE),
new NamedThreadFactory(PREFIX));
/** /**
* 动作枚举 * 动作枚举

6
designer_base/src/com/fr/design/extra/ShopManagerPane.java

@ -2,9 +2,9 @@ package com.fr.design.extra;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.general.Inter; import com.fr.general.Inter;
import javafx.embed.swing.JFXPanel;
import java.awt.*; import java.awt.BorderLayout;
import java.awt.Component;
/** /**
* @author richie * @author richie
@ -19,7 +19,7 @@ import java.awt.*;
*/ */
public class ShopManagerPane extends BasicPane { public class ShopManagerPane extends BasicPane {
public ShopManagerPane(JFXPanel webPane) { public ShopManagerPane(Component webPane) {
setLayout(new BorderLayout()); setLayout(new BorderLayout());
add(webPane, BorderLayout.CENTER); add(webPane, BorderLayout.CENTER);
} }

44
designer_base/src/com/fr/design/extra/WebViewDlgHelper.java

@ -17,23 +17,28 @@ import com.fr.plugin.PluginVerifyException;
import com.fr.stable.EnvChangedListener; import com.fr.stable.EnvChangedListener;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import javax.swing.*; import javax.swing.JOptionPane;
import java.awt.*; import javax.swing.SwingWorker;
import java.awt.BorderLayout;
import java.awt.Component;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
/** /**
* Created by vito on 2016/9/28. * 在合适的 jre 环境下创建带有 WebView 的窗口
*
* @author vito
* @date 2016/9/28
*/ */
public class WebViewDlgHelper { public class WebViewDlgHelper {
private static final String LATEST = "latest"; private static final String LATEST = "latest";
private static final String SHOP_SCRIPTS = "shop_scripts"; private static final String SHOP_SCRIPTS = "shop_scripts";
private static final int VERSION_8 = 8; private static final int VERSION_8 = 8;
// 调试时,使用installHome = ClassLoader.getSystemResource("").getPath()代替下面
private static String installHome = FRContext.getCurrentEnv().getWebReportPath(); private static String installHome = FRContext.getCurrentEnv().getWebReportPath();
private static final int BYTES_NUM = 1024; private static final int BYTES_NUM = 1024;
@ -146,24 +151,43 @@ public class WebViewDlgHelper {
} }
public static void createQQLoginDialog() { public static void createQQLoginDialog() {
QQLoginWebPane webPane = new QQLoginWebPane(new File(installHome).getAbsolutePath()); try {
UIDialog qqlog = new QQLoginDialog(DesignerContext.getDesignerFrame(), webPane); Class<?> clazz = Class.forName("com.fr.design.extra.QQLoginWebPane");
LoginWebBridge.getHelper().setQqDialog(qqlog); Constructor constructor = clazz.getConstructor(String.class);
qqlog.setVisible(true); Component webPane = (Component) constructor.newInstance(new File(installHome).getAbsolutePath());
UIDialog qqLoginDialog = new QQLoginDialog(DesignerContext.getDesignerFrame(), webPane);
LoginWebBridge.getHelper().setQQDialog(qqLoginDialog);
qqLoginDialog.setVisible(true);
} catch (Throwable ignored) {
}
} }
private static void showPluginDlg(String mainJsPath) { private static void showPluginDlg(String mainJsPath) {
BasicPane managerPane = new ShopManagerPane(new PluginWebPane(mainJsPath)); try {
Class<?> clazz = Class.forName("com.fr.design.extra.PluginWebPane");
Constructor constructor = clazz.getConstructor(String.class);
Component webPane = (Component) constructor.newInstance(mainJsPath);
BasicPane managerPane = new ShopManagerPane(webPane);
UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane); UIDialog dlg = new ShopDialog(DesignerContext.getDesignerFrame(), managerPane);
PluginWebBridge.getHelper().setDialogHandle(dlg); PluginWebBridge.getHelper().setDialogHandle(dlg);
dlg.setVisible(true); dlg.setVisible(true);
} catch (Throwable ignored) {
}
} }
private static void showLoginDlg() { private static void showLoginDlg() {
LoginWebPane webPane = new LoginWebPane(installHome); try {
Class<?> clazz = Class.forName("com.fr.design.extra.LoginWebPane");
Constructor constructor = clazz.getConstructor(String.class);
Component webPane = (Component) constructor.newInstance(installHome);
UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane); UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), webPane);
LoginWebBridge.getHelper().setDialogHandle(qqdlg); LoginWebBridge.getHelper().setDialogHandle(qqdlg);
qqdlg.setVisible(true); qqdlg.setVisible(true);
} catch (Throwable ignored) {
}
} }
private static Component initTraditionalStore() { private static Component initTraditionalStore() {

Loading…
Cancel
Save