From 913a3b7409e08fd239a65ff7afabefe95b51865a Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 26 十二月 2025 19:44:23 +0800
Subject: [PATCH] 优化了异形有障碍物算法
---
src/denglu/Denglu.java | 171 ++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 121 insertions(+), 50 deletions(-)
diff --git a/src/denglu/Denglu.java b/src/denglu/Denglu.java
index 98117a5..4a756c3 100644
--- a/src/denglu/Denglu.java
+++ b/src/denglu/Denglu.java
@@ -9,6 +9,7 @@
import udpdell.UDPServer;
import user.Usrdell;
import Mqttmessage.Client;
+import login.LoginVerifier;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@@ -438,11 +439,17 @@
boolean isRemember = "1".equals(rememberPwd);
rememberMe.setSelected(isRemember);
- // 濡傛灉璁颁綇鎴戣閫変腑锛屽~鍏呭瘑鐮�
+ // 濡傛灉璁颁綇鎴戣閫変腑锛屽~鍏呭瘑鐮佸苟鑷姩鐧诲綍锛堝欢杩熸墽琛岋紝纭繚绐楀彛宸叉樉绀猴級
if (isRemember) {
String savedPassword = UserChuShiHua.getProperty("password");
- if (savedPassword != null && !savedPassword.equals("-1")) {
+ String savedEmail = UserChuShiHua.getProperty("email");
+ if (savedPassword != null && !savedPassword.equals("-1") &&
+ savedEmail != null && !savedEmail.equals("-1")) {
passwordField.setText(savedPassword);
+ // 寤惰繜鎵ц鑷姩鐧诲綍锛岀‘淇濈獥鍙e凡缁忔樉绀�
+ SwingUtilities.invokeLater(() -> {
+ performAutoLogin(savedEmail, savedPassword);
+ });
}
}
}
@@ -459,11 +466,11 @@
}
private void performLogin() {
- String username = usernameField.getText().trim();
+ String usernameOrEmail = usernameField.getText().trim();
String password = new String(passwordField.getPassword()).trim();
// 杈撳叆楠岃瘉
- if (username.isEmpty()) {
+ if (usernameOrEmail.isEmpty()) {
JOptionPane.showMessageDialog(this,
"璇疯緭鍏ョ敤鎴峰悕鎴栭偖绠�",
"杈撳叆閿欒",
@@ -481,43 +488,117 @@
return;
}
- // 楠岃瘉鐢ㄦ埛鍚嶅拰瀵嗙爜
- if (validateLogin(username, password)) {
- // 鏇存柊鏈�鍚庣櫥褰曟椂闂�
- UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
-
- // 淇濆瓨璁颁綇鎴戠姸鎬�
- if (rememberMe.isSelected()) {
- UserChuShiHua.updateProperty("rememberPassword", "1");
- UserChuShiHua.updateProperty("userName", username);
- } else {
- UserChuShiHua.updateProperty("rememberPassword", "0");
+ // 鑾峰彇閭鍦板潃锛堝鏋滆緭鍏ョ殑鏄敤鎴峰悕锛屼粠閰嶇疆鏂囦欢涓幏鍙栧搴旂殑閭锛�
+ String email = getEmailFromInput(usernameOrEmail);
+
+ // 绂佺敤鐧诲綍鎸夐挳锛岄槻姝㈤噸澶嶇偣鍑�
+ loginButton.setEnabled(false);
+
+ // 鍦ㄦ柊绾跨▼涓皟鐢ˋPI锛岄伩鍏嶉樆濉濽I
+ new Thread(() -> {
+ try {
+ // 璋冪敤鐧诲綍楠岃瘉API
+ LoginVerifier.LoginVerifyResponse response = LoginVerifier.verifyLogin(email, password);
+
+ // 鍦‥DT绾跨▼涓洿鏂癠I
+ SwingUtilities.invokeLater(() -> {
+ loginButton.setEnabled(true);
+
+ if (response.isSuccess()) {
+ // 鐧诲綍鎴愬姛
+ // 鏇存柊鏈�鍚庣櫥褰曟椂闂�
+ UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
+
+ // 淇濆瓨璁颁綇鎴戠姸鎬�
+ if (rememberMe.isSelected()) {
+ UserChuShiHua.updateProperty("rememberPassword", "1");
+ UserChuShiHua.updateProperty("userName", usernameOrEmail);
+ UserChuShiHua.updateProperty("email", email);
+ UserChuShiHua.updateProperty("password", password);
+ } else {
+ UserChuShiHua.updateProperty("rememberPassword", "0");
+ }
+
+ // 鍏抽棴鐧诲綍绐楀彛骞舵墦寮�棣栭〉
+ openMainApplication();
+ } else {
+ // 鐧诲綍澶辫触锛屾樉绀洪敊璇俊鎭�
+ String errorMessage = response.getMessage() != null ?
+ response.getMessage() : "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒锛�";
+ JOptionPane.showMessageDialog(this,
+ errorMessage,
+ "鐧诲綍澶辫触",
+ JOptionPane.ERROR_MESSAGE);
+ passwordField.setText("");
+ passwordField.requestFocus();
+ }
+ });
+ } catch (Exception e) {
+ // 寮傚父澶勭悊锛屾仮澶嶆寜閽苟鏄剧ず閿欒
+ SwingUtilities.invokeLater(() -> {
+ loginButton.setEnabled(true);
+ JOptionPane.showMessageDialog(this,
+ "鐧诲綍鏃跺彂鐢熼敊璇�: " + e.getMessage(),
+ "閿欒",
+ JOptionPane.ERROR_MESSAGE);
+ passwordField.setText("");
+ passwordField.requestFocus();
+ });
}
-
- // 鍏抽棴鐧诲綍绐楀彛骞舵墦寮�棣栭〉
- openMainApplication();
-
- } else {
- JOptionPane.showMessageDialog(this,
- "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒锛�",
- "鐧诲綍澶辫触",
- JOptionPane.ERROR_MESSAGE);
- passwordField.setText("");
- passwordField.requestFocus();
- }
+ }).start();
}
- private boolean validateLogin(String username, String password) {
- // 浠嶶serChuShiHua鑾峰彇瀛樺偍鐨勭敤鎴锋暟鎹繘琛屾瘮杈�
- String storedUsername = UserChuShiHua.getProperty("userName");
- String storedPassword = UserChuShiHua.getProperty("password");
- String storedEmail = UserChuShiHua.getProperty("email");
-
- // 妫�鏌ョ敤鎴峰悕/閭鍜屽瘑鐮佹槸鍚﹀尮閰�
- boolean usernameMatch = username.equals(storedUsername) || username.equals(storedEmail);
- boolean passwordMatch = password.equals(storedPassword);
-
- return usernameMatch && passwordMatch;
+ // 閭楠岃瘉鏂规硶
+ private boolean isValidEmail(String email) {
+ // 绠�鍗曠殑閭鏍煎紡楠岃瘉
+ String emailRegex = "^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$";
+ return email != null && email.matches(emailRegex);
+ }
+
+ // 鑾峰彇閭鍦板潃锛堝鏋滆緭鍏ョ殑鏄敤鎴峰悕锛屽垯浠庨厤缃枃浠朵腑鑾峰彇閭锛�
+ private String getEmailFromInput(String usernameOrEmail) {
+ // 濡傛灉杈撳叆鐨勬槸閭鏍煎紡锛岀洿鎺ヨ繑鍥�
+ if (isValidEmail(usernameOrEmail)) {
+ return usernameOrEmail;
+ }
+ // 鍚﹀垯锛屼粠閰嶇疆鏂囦欢涓幏鍙栦繚瀛樼殑閭
+ String savedEmail = UserChuShiHua.getProperty("email");
+ if (savedEmail != null && !savedEmail.equals("-1")) {
+ // 妫�鏌ヨ緭鍏ョ殑鐢ㄦ埛鍚嶆槸鍚﹀尮閰嶄繚瀛樼殑鐢ㄦ埛鍚�
+ String savedUsername = UserChuShiHua.getProperty("userName");
+ if (usernameOrEmail.equals(savedUsername)) {
+ return savedEmail;
+ }
+ }
+ // 濡傛灉鎵句笉鍒伴偖绠憋紝杩斿洖杈撳叆鐨勫瓧绗︿覆锛堝彲鑳芥槸閭鏍煎紡浣嗛獙璇佸け璐ワ紝鎴栬�呯敤鎴峰悕涓嶅瓨鍦級
+ return usernameOrEmail;
+ }
+
+ // 鑷姩鐧诲綍锛堜粠閰嶇疆鏂囦欢璇诲彇閭鍜屽瘑鐮侊級
+ private void performAutoLogin(String email, String password) {
+ // 鍦ㄦ柊绾跨▼涓皟鐢ˋPI锛岄伩鍏嶉樆濉濽I
+ new Thread(() -> {
+ try {
+ LoginVerifier.LoginVerifyResponse response = LoginVerifier.verifyLogin(email, password);
+
+ SwingUtilities.invokeLater(() -> {
+ if (response.isSuccess()) {
+ // 鐧诲綍鎴愬姛锛岃烦杞埌涓婚〉
+ openMainApplication();
+ } else {
+ // 鐧诲綍澶辫触锛屾竻绌哄瘑鐮佸瓧娈碉紝璁╃敤鎴烽噸鏂拌緭鍏�
+ passwordField.setText("");
+ usernameField.requestFocus();
+ }
+ });
+ } catch (Exception e) {
+ // 寮傚父澶勭悊锛屾竻绌哄瘑鐮佸瓧娈�
+ SwingUtilities.invokeLater(() -> {
+ passwordField.setText("");
+ usernameField.requestFocus();
+ });
+ }
+ }).start();
}
private void openMainApplication() {
@@ -538,7 +619,7 @@
// 璁剧疆涓庣櫥褰曢〉闈㈢浉鍚岀殑灏哄
mainFrame.setSize(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT);
mainFrame.setMinimumSize(new Dimension(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT));
- mainFrame.setResizable(false);
+ mainFrame.setResizable(true);
mainFrame.setLocationRelativeTo(null);
mainFrame.setVisible(true);
@@ -595,17 +676,7 @@
System.out.println("鍒濆鐢ㄦ埛鍚�: " + UserChuShiHua.getProperty("userName"));
System.out.println("鍒濆瀵嗙爜: " + UserChuShiHua.getProperty("password"));
- // 妫�鏌ユ槸鍚﹁浣忓瘑鐮侊紝濡傛灉鏄垯鐩存帴杩涘叆涓婚〉
- String rememberPwd = UserChuShiHua.getProperty("rememberPassword");
- if ("1".equals(rememberPwd)) {
- String storedUser = UserChuShiHua.getProperty("userName");
- if (storedUser != null && !storedUser.equals("-1")) {
- launchMainApp();
- return;
- }
- }
-
- // 鍚姩鐧诲綍鐣岄潰
+ // 鍚姩鐧诲綍鐣岄潰锛堣嚜鍔ㄧ櫥褰曢�昏緫鍦� loadUserPreferences 涓鐞嗭級
EventQueue.invokeLater(() -> {
try {
new Denglu().setVisible(true);
--
Gitblit v1.10.0