Browse Source

REPORT-1181 mac10.12和javafx弹出框初始化时会有大几率卡死在native方法,这里先屏蔽一下。

master
vito 8 years ago
parent
commit
86bea80f19
  1. 466
      designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java

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

@ -18,6 +18,7 @@ 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.EncodeConstants; import com.fr.stable.EncodeConstants;
import com.fr.stable.OperatingSystem;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
@ -34,62 +35,61 @@ import java.util.HashMap;
/** /**
* @author neil * @author neil
*
* @date: 2015-3-4-上午9:05:52 * @date: 2015-3-4-上午9:05:52
*/ */
public class UserInfoLabel extends UILabel{ public class UserInfoLabel extends UILabel {
//默认查询消息时间, 30s //默认查询消息时间, 30s
private static final long CHECK_MESSAGE_TIME = 30 * 1000L; private static final long CHECK_MESSAGE_TIME = 30 * 1000L;
//默认论坛检测到更新后的弹出延迟时间 //默认论坛检测到更新后的弹出延迟时间
private static final long DELAY_TIME = 2 * 1000L; private static final long DELAY_TIME = 2 * 1000L;
private static final String MESSAGE_KEY = "messageCount"; private static final String MESSAGE_KEY = "messageCount";
private static final int MIN_MESSAGE_COUNT = 1; private static final int MIN_MESSAGE_COUNT = 1;
private static final int MENU_HEIGHT = 20; private static final int MENU_HEIGHT = 20;
private static final int DEFAULT_BBS_UID = 0; private static final int DEFAULT_BBS_UID = 0;
//用户名 //用户名
private String userName; private String userName;
//消息条数 //消息条数
private int messageCount; private int messageCount;
private UserInfoPane userInfoPane; private UserInfoPane userInfoPane;
private BBSLoginDialog bbsLoginDialog; private BBSLoginDialog bbsLoginDialog;
public UserInfoPane getUserInfoPane() { public UserInfoPane getUserInfoPane() {
return userInfoPane; return userInfoPane;
} }
public void setUserInfoPane(UserInfoPane userInfoPane) { public void setUserInfoPane(UserInfoPane userInfoPane) {
this.userInfoPane = userInfoPane; this.userInfoPane = userInfoPane;
} }
public BBSLoginDialog getBbsLoginDialog() { public BBSLoginDialog getBbsLoginDialog() {
return bbsLoginDialog; return bbsLoginDialog;
} }
public void setBbsLoginDialog(BBSLoginDialog bbsLoginDialog) { public void setBbsLoginDialog(BBSLoginDialog bbsLoginDialog) {
this.bbsLoginDialog = bbsLoginDialog; this.bbsLoginDialog = bbsLoginDialog;
} }
public UserInfoLabel(UserInfoPane userInfoPane) { public UserInfoLabel(UserInfoPane userInfoPane) {
this.userInfoPane = userInfoPane; this.userInfoPane = userInfoPane;
String userName = DesignerEnvManager.getEnvManager().getBBSName(); String userName = DesignerEnvManager.getEnvManager().getBBSName();
this.addMouseListener(userInfoAdapter); this.addMouseListener(userInfoAdapter);
this.setHorizontalAlignment(SwingConstants.CENTER); this.setHorizontalAlignment(SwingConstants.CENTER);
this.setText(userName); this.setText(userName);
LoginWebBridge loginWebBridge = new LoginWebBridge(); LoginWebBridge loginWebBridge = new LoginWebBridge();
loginWebBridge.setUserName(userName, UserInfoLabel.this); loginWebBridge.setUserName(userName, UserInfoLabel.this);
LoginCheckContext.addLoginCheckListener(new LoginCheckListener() { LoginCheckContext.addLoginCheckListener(new LoginCheckListener() {
@Override @Override
public void loginChecked() { public void loginChecked() {
/* /*
if (bbsLoginDialog == null) { if (bbsLoginDialog == null) {
bbsLoginDialog = new BBSLoginDialog(DesignerContext.getDesignerFrame(), UserInfoLabel.this); bbsLoginDialog = new BBSLoginDialog(DesignerContext.getDesignerFrame(), UserInfoLabel.this);
} }
bbsLoginDialog.clearLoginInformation(); bbsLoginDialog.clearLoginInformation();
@ -97,144 +97,144 @@ public class UserInfoLabel extends UILabel{
bbsLoginDialog.setModal(true); bbsLoginDialog.setModal(true);
bbsLoginDialog.showWindow(); bbsLoginDialog.showWindow();
*/ */
} }
}); });
if (StableUtils.getMajorJavaVersion() == 8) { if (StableUtils.getMajorJavaVersion() == 8) {
PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this); PluginWebBridge.getHelper().setUILabel(UserInfoLabel.this);
} }
QQLoginWebBridge.getHelper().setUILabelInPlugin(UserInfoLabel.this); QQLoginWebBridge.getHelper().setUILabelInPlugin(UserInfoLabel.this);
UserLoginContext.addLoginContextListener(new LoginContextListener() { UserLoginContext.addLoginContextListener(new LoginContextListener() {
@Override @Override
public void showLoginContext() { public void showLoginContext() {
LoginPane managerPane = new LoginPane(); LoginPane managerPane = new LoginPane();
UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(),managerPane); UIDialog qqdlg = new LoginDialog(DesignerContext.getDesignerFrame(), managerPane);
LoginWebBridge.getHelper().setDialogHandle(qqdlg); LoginWebBridge.getHelper().setDialogHandle(qqdlg);
LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this); LoginWebBridge.getHelper().setUILabel(UserInfoLabel.this);
QQLoginWebBridge.getHelper().setLoginlabel(); QQLoginWebBridge.getHelper().setLoginlabel();
qqdlg.setVisible(true); qqdlg.setVisible(true);
clearLoginInformation(); clearLoginInformation();
updateInfoPane(); updateInfoPane();
} }
}); });
} }
private void clearLoginInformation(){ private void clearLoginInformation() {
DesignerEnvManager.getEnvManager().setBBSName(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setBBSName(StringUtils.EMPTY);
DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY);
DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY);
DesignerEnvManager.getEnvManager().setBbsUid(DEFAULT_BBS_UID); DesignerEnvManager.getEnvManager().setBbsUid(DEFAULT_BBS_UID);
} }
private void updateInfoPane(){ private void updateInfoPane() {
userInfoPane.markUnSignIn(); userInfoPane.markUnSignIn();
} }
/** /**
* showBBSDialog 弹出BBS资讯框 * showBBSDialog 弹出BBS资讯框
*/ */
public static void showBBSDialog(){ public static void showBBSDialog() {
Thread showBBSThread = new Thread(new Runnable() { Thread showBBSThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
if(!FRContext.isChineseEnv()){ // vito:最新mac10.12和javafx弹出框初始化时会有大几率卡死在native方法,这里先屏蔽一下。
return; if (!FRContext.isChineseEnv() || OperatingSystem.isMacOS()) {
} return;
String lastBBSNewsTime = DesignerEnvManager.getEnvManager().getLastShowBBSNewsTime(); }
try { String lastBBSNewsTime = DesignerEnvManager.getEnvManager().getLastShowBBSNewsTime();
try {
String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
if (ComparatorUtils.equals(lastBBSNewsTime, today)) { if (ComparatorUtils.equals(lastBBSNewsTime, today)) {
return; return;
} }
Thread.sleep(DELAY_TIME); Thread.sleep(DELAY_TIME);
} catch (InterruptedException e) { } catch (InterruptedException e) {
FRContext.getLogger().error(e.getMessage()); FRContext.getLogger().error(e.getMessage());
} }
HttpClient hc = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.popup")); HttpClient hc = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.popup"));
if (!hc.isServerAlive()){ if (!hc.isServerAlive()) {
return; return;
} }
String res = hc.getResponseText(); String res = hc.getResponseText();
if (res.indexOf(BBSConstants.UPDATE_KEY) == -1){ if (res.indexOf(BBSConstants.UPDATE_KEY) == -1) {
return; return;
} }
try { try {
BBSDialog bbsLabel = new BBSDialog(DesignerContext.getDesignerFrame()); BBSDialog bbsLabel = new BBSDialog(DesignerContext.getDesignerFrame());
bbsLabel.showWindow(SiteCenter.getInstance().acquireUrlByKind("bbs.popup")); bbsLabel.showWindow(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 e) {
} }
} }
}); });
showBBSThread.start(); showBBSThread.start();
} }
private void sleep(long millis){ private void sleep(long millis) {
try { try {
Thread.sleep(millis); Thread.sleep(millis);
} catch (InterruptedException e) { } catch (InterruptedException e) {
FRContext.getLogger().error(e.getMessage()); FRContext.getLogger().error(e.getMessage());
} }
} }
public String getUserName() { public String getUserName() {
return userName; return userName;
} }
/** /**
* 重置当前用户名 * 重置当前用户名
* */
*/ public void resetUserName() {
public void resetUserName(){ this.userName = StringUtils.EMPTY;
this.userName = StringUtils.EMPTY; }
}
public void setUserName(String userName) {
public void setUserName(String userName) { if (StringUtils.isEmpty(userName)) {
if(StringUtils.isEmpty(userName)){ return;
return; }
}
if (StringUtils.isEmpty(this.userName)) {
if(StringUtils.isEmpty(this.userName)){ updateMessageCount();
updateMessageCount(); }
} //往designerenvmanger里写一下
//往designerenvmanger里写一下 DesignerEnvManager.getEnvManager().setBBSName(userName);
DesignerEnvManager.getEnvManager().setBBSName(userName); this.userName = userName;
this.userName = userName; }
}
private void updateMessageCount() {
private void updateMessageCount(){ //启动获取消息更新的线程
//启动获取消息更新的线程 //登陆状态, 根据存起来的用户名密码, 每1分钟发起一次请求, 更新消息条数.
//登陆状态, 根据存起来的用户名密码, 每1分钟发起一次请求, 更新消息条数. Thread updateMessageThread = new Thread(new Runnable() {
Thread updateMessageThread = new Thread(new Runnable() {
@Override
@Override public void run() {
public void run() {
sleep(CHECK_MESSAGE_TIME); sleep(CHECK_MESSAGE_TIME);
//从env中获取username, 因为如果注销的话, env的里username会被清空. //从env中获取username, 因为如果注销的话, env的里username会被清空.
while(StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())){ while (StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())) {
HashMap<String, String> para = new HashMap<String, String>(); HashMap<String, String> para = new HashMap<String, String>();
para.put("username", encode(encode(userName))); para.put("username", encode(encode(userName)));
HttpClient getMessage = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.message"), para); HttpClient getMessage = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.message"), para);
getMessage.asGet(); getMessage.asGet();
if(getMessage.isServerAlive()){ if (getMessage.isServerAlive()) {
try { try {
String res = getMessage.getResponseText(); String res = getMessage.getResponseText();
if (StringUtils.isNotEmpty(res)) { if (StringUtils.isNotEmpty(res)) {
setMessageCount(Integer.parseInt(res)); setMessageCount(Integer.parseInt(res));
} }
} catch (Exception e) { } catch (Exception e) {
} }
} }
sleep(CHECK_MESSAGE_TIME); sleep(CHECK_MESSAGE_TIME);
} }
} }
}); });
updateMessageThread.start(); updateMessageThread.start();
} }
private String encode(String str){ private String encode(String str) {
try { try {
return URLEncoder.encode(str, EncodeConstants.ENCODING_UTF_8); return URLEncoder.encode(str, EncodeConstants.ENCODING_UTF_8);
} catch (UnsupportedEncodingException e) { } catch (UnsupportedEncodingException e) {
@ -242,75 +242,75 @@ public class UserInfoLabel extends UILabel{
} }
} }
public int getMessageCount() { public int getMessageCount() {
return messageCount; return messageCount;
} }
public void setMessageCount(int messageCount) { public void setMessageCount(int messageCount) {
// 当只有一条消息时,阅读之后,消息面板重置为只含用户名的状态 // 当只有一条消息时,阅读之后,消息面板重置为只含用户名的状态
if(this.messageCount == MIN_MESSAGE_COUNT && messageCount < MIN_MESSAGE_COUNT){ if (this.messageCount == MIN_MESSAGE_COUNT && messageCount < MIN_MESSAGE_COUNT) {
this.setText(this.userName); this.setText(this.userName);
return; return;
} }
if(this.messageCount == messageCount || messageCount < MIN_MESSAGE_COUNT){ if (this.messageCount == messageCount || messageCount < MIN_MESSAGE_COUNT) {
return; return;
} }
this.messageCount = messageCount; this.messageCount = messageCount;
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
//内容eg: aaa(11) //内容eg: aaa(11)
sb.append(StringUtils.BLANK).append(this.userName) sb.append(StringUtils.BLANK).append(this.userName)
.append("(").append(this.messageCount) .append("(").append(this.messageCount)
.append(")").append(StringUtils.BLANK); .append(")").append(StringUtils.BLANK);
//更新面板Text //更新面板Text
this.setText(sb.toString()); this.setText(sb.toString());
} }
private MouseAdapter userInfoAdapter = new MouseAdapter() { private MouseAdapter userInfoAdapter = new MouseAdapter() {
public void mouseEntered(MouseEvent e) { public void mouseEntered(MouseEvent e) {
UserInfoLabel.this.setCursor(new Cursor(Cursor.HAND_CURSOR)); UserInfoLabel.this.setCursor(new Cursor(Cursor.HAND_CURSOR));
}; }
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
userName = DesignerEnvManager.getEnvManager().getBBSName(); userName = DesignerEnvManager.getEnvManager().getBBSName();
if(StringUtils.isNotEmpty(userName)) { if (StringUtils.isNotEmpty(userName)) {
UIPopupMenu menu = new UIPopupMenu(); UIPopupMenu menu = new UIPopupMenu();
menu.setOnlyText(true); menu.setOnlyText(true);
menu.setPopupSize(userInfoPane.getWidth(),userInfoPane.getHeight()*3); menu.setPopupSize(userInfoPane.getWidth(), userInfoPane.getHeight() * 3);
//私人消息 //私人消息
UIMenuItem priviteMessage = new UIMenuItem(Inter.getLocText("FR-Designer-BBSLogin_Privite-Message")); UIMenuItem priviteMessage = new UIMenuItem(Inter.getLocText("FR-Designer-BBSLogin_Privite-Message"));
priviteMessage.addMouseListener(new MouseAdapter() { priviteMessage.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
if(StringUtils.isNotEmpty(userName)){ if (StringUtils.isNotEmpty(userName)) {
try { try {
String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default"); String loginUrl = SiteCenter.getInstance().acquireUrlByKind("bbs.default");
Desktop.getDesktop().browse(new URI(loginUrl)); Desktop.getDesktop().browse(new URI(loginUrl));
} catch (Exception exp) { } catch (Exception exp) {
FRContext.getLogger().info(exp.getMessage()); FRContext.getLogger().info(exp.getMessage());
} }
return; return;
} }
} }
}); });
//切换账号 //切换账号
UIMenuItem closeOther = new UIMenuItem(Inter.getLocText("FR-Designer-BBSLogin_Switch-Account")); UIMenuItem closeOther = new UIMenuItem(Inter.getLocText("FR-Designer-BBSLogin_Switch-Account"));
closeOther.addMouseListener(new MouseAdapter() { closeOther.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
UserLoginContext.fireLoginContextListener(); UserLoginContext.fireLoginContextListener();
} }
}); });
menu.add(priviteMessage); menu.add(priviteMessage);
menu.add(closeOther); menu.add(closeOther);
GUICoreUtils.showPopupMenu(menu, UserInfoLabel.this, 0, MENU_HEIGHT); GUICoreUtils.showPopupMenu(menu, UserInfoLabel.this, 0, MENU_HEIGHT);
} else { } else {
UserLoginContext.fireLoginContextListener(); UserLoginContext.fireLoginContextListener();
} }
} }
}; };
} }

Loading…
Cancel
Save