张世豪
2 天以前 6b1447fb1794e08f8e5f580b83ae5eabe4e617d8
登录页面启用
已修改13个文件
已添加2个文件
756 ■■■■ 文件已修改
Obstacledge.properties 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
dikuai.properties 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
set.properties 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/bianjie/BoundaryLengthDrawer.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/bianjie/shudongdraw.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/denglu/Denglu.java 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/homein/Homein.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/lujing/ObstaclePathPlanner.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/set/Sets.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/udpdell/UDPServer.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/user/Usr.java 171 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/user/Usrdell.java 314 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/zhuye/Shouye.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/zhuye/celiangmoshi.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user.properties 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Obstacledge.properties
@@ -1,5 +1,5 @@
# å‰²è‰æœºåœ°å—障碍物配置文件
# ç”Ÿæˆæ—¶é—´ï¼š2025-12-23T18:40:37.614553600
# ç”Ÿæˆæ—¶é—´ï¼š2025-12-23T19:10:14.326740700
# åæ ‡ç³»ï¼šWGS84(度分格式)
# ============ åœ°å—基准站配置 ============
dikuai.properties
@@ -1,8 +1,8 @@
#Dikuai Properties
#Tue Dec 23 18:41:03 CST 2025
#Tue Dec 23 19:10:14 CST 2025
LAND1.angleThreshold=-1
LAND1.baseStationCoordinates=3949.89151752,N,11616.79267501,E
LAND1.boundaryCoordinates=-99.64,193.56;185.77,182.30;61.84,424.89;237.59,415.88;235.34,539.80;-26.03,544.31
LAND1.boundaryCoordinates=-58.32,-476.37;85.99,-289.22;354.31,-329.80;293.43,-559.79
LAND1.boundaryOriginalCoordinates=39.831522,116.279873,49.25;39.831524,116.279878,49.25;39.831525,116.279878,49.24;39.831524,116.279912,49.30;39.831524,116.279911,49.29;39.831523,116.279911,49.23;39.831521,116.279915,49.31;39.831517,116.279925,49.34;39.831514,116.279940,49.30;39.831514,116.279957,49.28;39.831516,116.279974,49.28;39.831518,116.279991,49.29;39.831521,116.280008,49.24;39.831524,116.280025,49.30;39.831526,116.280042,49.24;39.831529,116.280059,49.29;39.831529,116.280076,49.26;39.831530,116.280093,49.32;39.831531,116.280110,49.28;39.831533,116.280127,49.28;39.831535,116.280144,49.26;39.831539,116.280161,49.27;39.831544,116.280175,49.25;39.831551,116.280190,49.24;39.831558,116.280204,49.26;39.831566,116.280219,49.26;39.831574,116.280234,49.22;39.831583,116.280248,49.24;39.831591,116.280260,49.24;39.831600,116.280272,49.23;39.831608,116.280285,49.18;39.831615,116.280298,49.12;39.831618,116.280312,49.11;39.831618,116.280328,49.12;39.831615,116.280342,49.15;39.831610,116.280356,49.21;39.831602,116.280369,49.23;39.831592,116.280379,49.25;39.831581,116.280388,49.25;39.831569,116.280394,49.19;39.831559,116.280395,49.23;39.831552,116.280387,49.28;39.831547,116.280373,49.32;39.831544,116.280357,49.33;39.831541,116.280340,49.29;39.831539,116.280324,49.27;39.831536,116.280307,49.24;39.831534,116.280290,49.25;39.831531,116.280273,49.26;39.831527,116.280257,49.28;39.831522,116.280242,49.21;39.831514,116.280232,49.28;39.831504,116.280229,49.24;39.831491,116.280230,49.33;39.831478,116.280233,49.34;39.831466,116.280236,49.31;39.831454,116.280239,49.31;39.831441,116.280242,49.26;39.831429,116.280244,49.23;39.831416,116.280247,49.25;39.831402,116.280250,49.22;39.831389,116.280253,49.25;39.831376,116.280256,49.26;39.831364,116.280258,49.24;39.831351,116.280261,49.25;39.831338,116.280265,49.26;39.831324,116.280268,49.20;39.831311,116.280271,49.16;39.831298,116.280274,49.17;39.831285,116.280277,49.22;39.831271,116.280278,49.16;39.831261,116.280273,49.23
LAND1.boundaryOriginalXY=-1
LAND1.boundaryPointInterval=-1
@@ -17,9 +17,9 @@
LAND1.mowingSafetyDistance=0.53
LAND1.mowingTrack=-1
LAND1.mowingWidth=200
LAND1.plannedPath=-25.601252,543.772523;-98.992501,194.064867;184.886062,182.865285;60.950435,425.466300;237.049774,416.438391;234.819374,539.278905;-25.601252,543.772523;-24.583154,543.754955;-97.979107,194.024887;-95.952319,193.944926;-22.546959,543.719820;-20.510764,543.684685;-93.925532,193.864965;-91.898744,193.785004;-18.474569,543.649550;-16.438374,543.614415;-89.871956,193.705043;-87.845169,193.625082;-14.402179,543.579280;-12.365984,543.544145;-85.818381,193.545122;-83.791593,193.465161;-10.329789,543.509010;-8.293594,543.473875;-81.764806,193.385200;-79.738018,193.305239;-6.257399,543.438740;-4.221204,543.403605;-77.711230,193.225278;-75.684443,193.145317;-2.185009,543.368470;-0.148814,543.333335;-73.657655,193.065356;-71.630868,192.985396;1.887381,543.298200;3.923576,543.263065;-69.604080,192.905435;-67.577292,192.825474;5.959771,543.227930;7.995966,543.192795;-65.550505,192.745513;-63.523717,192.665552;10.032161,543.157660;12.068356,543.122525;-61.496929,192.585591;-59.470142,192.505630;14.104551,543.087390;16.140746,543.052255;-57.443354,192.425670;-55.416566,192.345709;18.176941,543.017120;20.213136,542.981985;-53.389779,192.265748;-51.362991,192.185787;22.249331,542.946850;24.285526,542.911715;-49.336204,192.105826;-47.309416,192.025865;26.321721,542.876580;28.357916,542.841445;-45.282628,191.945904;-43.255841,191.865944;30.394110,542.806310;32.430305,542.771175;-41.229053,191.785983;-39.202265,191.706022;34.466500,542.736040;36.502695,542.700905;-37.175478,191.626061;-35.148690,191.546100;38.538890,542.665770;40.575085,542.630635;-33.121903,191.466139;-31.095115,191.386178;42.611280,542.595500;44.647475,542.560365;-29.068327,191.306218;-27.041540,191.226257;46.683670,542.525230;48.719865,542.490095;-25.014752,191.146296;-22.987964,191.066335;50.756060,542.454960;52.792255,542.419825;-20.961177,190.986374;-18.934389,190.906413;54.828450,542.384690;56.864645,542.349555;-16.907601,190.826452;-14.880814,190.746491;58.900840,542.314420;60.937035,542.279285;-12.854026,190.666531;-10.827239,190.586570;62.973230,542.244150;65.009425,542.209015;-8.800451,190.506609;-6.773663,190.426648;67.045620,542.173880;69.081815,542.138745;-4.746876,190.346687;-2.720088,190.266726;71.118010,542.103610;73.154205,542.068475;-0.693300,190.186765;1.333487,190.106805;75.190400,542.033340;77.226595,541.998205;3.360275,190.026844;5.387063,189.946883;79.262790,541.963070;81.298985,541.927935;7.413850,189.866922;9.440638,189.786961;83.335180,541.892800;85.371375,541.857665;11.467425,189.707000;13.494213,189.627039;62.395060,422.638481;62.966825,425.362928;87.407570,541.822530;89.443765,541.787394;64.988641,425.259278;63.843573,419.803053;15.521001,189.547079;17.547788,189.467118;65.292086,416.967624;67.010457,425.155627;91.479960,541.752259;93.516155,541.717124;69.032273,425.051977;66.740598,414.132195;19.574576,189.387157;21.601364,189.307196;68.189111,411.296767;71.054089,424.948326;95.552350,541.681989;97.588545,541.646854;73.075906,424.844676;69.637623,408.461338;23.628151,189.227235;25.654939,189.147274;71.086136,405.625910;75.097722,424.741026;99.624740,541.611719;101.660935,541.576584;77.119538,424.637375;72.534648,402.790481;27.681726,189.067313;29.708514,188.987353;73.983161,399.955053;79.141354,424.533725;103.697130,541.541449;105.733325,541.506314;81.163170,424.430074;75.431674,397.119624;31.735302,188.907392;33.762089,188.827431;76.880186,394.284195;83.184986,424.326424;107.769520,541.471179;109.805715,541.436044;85.206802,424.222773;78.328699,391.448767;35.788877,188.747470;37.815665,188.667509;79.777211,388.613338;87.228618,424.119123;111.841910,541.400909;113.878105,541.365774;89.250434,424.015473;81.225724,385.777910;39.842452,188.587548;41.869240,188.507587;82.674236,382.942481;91.272250,423.911822;115.914300,541.330639;117.950495,541.295504;93.294066,423.808172;84.122749,380.107053;43.896028,188.427627;45.922815,188.347666;85.571262,377.271624;95.315882,423.704521;119.986690,541.260369;122.022885,541.225234;97.337698,423.600871;87.019774,374.436195;47.949603,188.267705;49.976390,188.187744;88.468287,371.600767;99.359514,423.497221;124.059080,541.190099;126.095275,541.154964;101.381330,423.393570;89.916799,368.765338;52.003178,188.107783;54.029966,188.027822;91.365312,365.929910;103.403146,423.289920;128.131470,541.119829;130.167665,541.084694;105.424962,423.186269;92.813824,363.094481;56.056753,187.947861;58.083541,187.867901;94.262337,360.259052;107.446778,423.082619;132.203860,541.049559;134.240055,541.014424;109.468594,422.978968;95.710850,357.423624;60.110329,187.787940;62.137116,187.707979;97.159362,354.588195;111.490410,422.875318;136.276250,540.979289;138.312445,540.944154;113.512226,422.771668;98.607875,351.752767;64.163904,187.628018;66.190691,187.548057;100.056387,348.917338;115.534042,422.668017;140.348640,540.909019;142.384835,540.873884;117.555858,422.564367;101.504900,346.081910;68.217479,187.468096;70.244267,187.388135;102.953412,343.246481;119.577674,422.460716;144.421030,540.838749;146.457225,540.803614;121.599490,422.357066;104.401925,340.411052;72.271054,187.308175;74.297842,187.228214;105.850437,337.575624;123.621306,422.253415;148.493420,540.768479;150.529615,540.733344;125.643122,422.149765;107.298950,334.740195;76.324630,187.148253;78.351417,187.068292;108.747463,331.904767;127.664938,422.046115;152.565810,540.698209;154.602005,540.663074;129.686754,421.942464;110.195975,329.069338;80.378205,186.988331;82.404993,186.908370;111.644488,326.233909;131.708570,421.838814;156.638200,540.627939;158.674395,540.592804;133.730386,421.735163;113.093000,323.398481;84.431780,186.828409;86.458568,186.748449;114.541513,320.563052;135.752203,421.631513;160.710590,540.557669;162.746785,540.522534;137.774019,421.527862;115.990025,317.727624;88.485355,186.668488;90.512143,186.588527;117.438538,314.892195;139.795835,421.424212;164.782980,540.487399;166.819175,540.452264;141.817651,421.320562;118.887051,312.056767;92.538931,186.508566;94.565718,186.428605;120.335563,309.221338;143.839467,421.216911;168.855370,540.417129;170.891565,540.381994;145.861283,421.113261;121.784076,306.385909;96.592506,186.348644;98.619294,186.268683;123.232588,303.550481;147.883099,421.009610;172.927760,540.346859;174.963955,540.311724;149.904915,420.905960;124.681101,300.715052;100.646081,186.188723;102.672869,186.108762;126.129613,297.879624;151.926731,420.802309;177.000150,540.276589;179.036345,540.241454;153.948547,420.698659;127.578126,295.044195;104.699657,186.028801;106.726444,185.948840;129.026639,292.208767;155.970363,420.595009;181.072540,540.206319;183.108735,540.171184;157.992179,420.491358;130.475151,289.373338;108.753232,185.868879;110.780019,185.788918;131.923664,286.537909;160.013995,420.387708;185.144930,540.136049;187.181125,540.100914;162.035811,420.284057;133.372176,283.702481;112.806807,185.708957;114.833595,185.628997;134.820689,280.867052;164.057627,420.180407;189.217320,540.065779;191.253515,540.030644;166.079443,420.076756;136.269201,278.031624;116.860382,185.549036;118.887170,185.469075;137.717714,275.196195;168.101259,419.973106;193.289710,539.995509;195.325905,539.960374;170.123075,419.869456;139.166227,272.360766;120.913958,185.389114;122.940745,185.309153;140.614739,269.525338;172.144891,419.765805;197.362100,539.925239;199.398295,539.890104;174.166707,419.662155;142.063252,266.689909;124.967533,185.229192;126.994320,185.149231;143.511764,263.854481;176.188523,419.558504;201.434490,539.854969;203.470685,539.819834;178.210339,419.454854;144.960277,261.019052;129.021108,185.069271;131.047896,184.989310;146.408789,258.183624;180.232155,419.351203;205.506880,539.784699;207.543075,539.749564;182.253971,419.247553;147.857302,255.348195;133.074683,184.909349;135.101471,184.829388;149.305815,252.512766;184.275787,419.143903;209.579270,539.714428;211.615465,539.679293;186.297603,419.040252;150.754327,249.677338;137.128259,184.749427;139.155046,184.669466;152.202840,246.841909;188.319419,418.936602;213.651660,539.644158;215.687855,539.609023;190.341235,418.832951;153.651352,244.006481;141.181834,184.589505;143.208622,184.509545;155.099865,241.171052;192.363051,418.729301;217.724050,539.573888;219.760245,539.538753;194.384867,418.625650;156.548377,238.335624;145.235409,184.429584;147.262197,184.349623;157.996890,235.500195;196.406683,418.522000;221.796439,539.503618;223.832634,539.468483;198.428499,418.418350;159.445403,232.664766;149.288984,184.269662;151.315772,184.189701;160.893915,229.829338;200.450316,418.314699;225.868829,539.433348;227.905024,539.398213;202.472132,418.211049;162.342428,226.993909;153.342560,184.109740;155.369347,184.029779;163.790940,224.158481;204.493948,418.107398;229.941219,539.363078;231.977414,539.327943;206.515764,418.003748;165.239453,221.323052;157.396135,183.949818;159.422923,183.869858;166.687965,218.487623;208.537580,417.900097;234.013609,539.292808;234.917706,533.863247;210.559396,417.796447;168.136478,215.652195;161.449710,183.789897;163.476498,183.709936;169.584991,212.816766;212.581212,417.692797;235.080431,524.901070;235.243156,515.938894;214.603028,417.589146;171.033503,209.981338;165.503286,183.629975;167.530073,183.550014;172.482016,207.145909;216.624844,417.485496;235.405881,506.976717;235.568606,498.014540;218.646660,417.381845;173.930528,204.310481;169.556861,183.470053;171.583648,183.390092;175.379041,201.475052;220.668476,417.278195;235.731331,489.052363;235.894056,480.090186;222.690292,417.174544;176.827553,198.639623;173.610436,183.310132;175.637224,183.230171;178.276066,195.804195;224.712108,417.070894;236.056781,471.128009;236.219507,462.165832;226.733924,416.967244;179.724578,192.968766;177.664011,183.150210;179.690799,183.070249;181.173091,190.133338;228.755740,416.863593;236.382232,453.203655;236.544957,444.241478;230.777556,416.759943;182.621604,187.297909;181.717587,182.990288;183.744374,182.910327;184.070116,184.462480;232.799372,416.656292;236.707682,435.279301;236.870407,426.317125;234.821188,416.552642
LAND1.plannedPath=353.646421,-330.235669;86.219211,-289.790692;-57.399120,-476.043693;293.049800,-559.155132;353.646421,-330.235669;353.131597,-332.180552;84.822383,-291.602183;83.425556,-293.413674;352.616772,-334.125435;352.101948,-336.070317;82.028728,-295.225165;80.631901,-297.036656;351.587124,-338.015200;351.072299,-339.960083;79.235073,-298.848147;77.838246,-300.659638;350.557475,-341.904966;350.042650,-343.849848;76.441418,-302.471129;75.044591,-304.282620;349.527826,-345.794731;349.013002,-347.739614;73.647763,-306.094111;72.250936,-307.905602;348.498177,-349.684497;347.983353,-351.629379;70.854109,-309.717093;69.457281,-311.528584;347.468528,-353.574262;346.953704,-355.519145;68.060454,-313.340075;66.663626,-315.151566;346.438880,-357.464028;345.924055,-359.408910;65.266799,-316.963057;63.869971,-318.774548;345.409231,-361.353793;344.894406,-363.298676;62.473144,-320.586039;61.076316,-322.397529;344.379582,-365.243559;343.864758,-367.188441;59.679489,-324.209020;58.282661,-326.020511;343.349933,-369.133324;342.835109,-371.078207;56.885834,-327.832002;55.489006,-329.643493;342.320284,-373.023090;341.805460,-374.967972;54.092179,-331.454984;52.695351,-333.266475;341.290636,-376.912855;340.775811,-378.857738;51.298524,-335.077966;49.901697,-336.889457;340.260987,-380.802621;339.746163,-382.747503;48.504869,-338.700948;47.108042,-340.512439;339.231338,-384.692386;338.716514,-386.637269;45.711214,-342.323930;44.314387,-344.135421;338.201689,-388.582152;337.686865,-390.527034;42.917559,-345.946912;41.520732,-347.758403;337.172041,-392.471917;336.657216,-394.416800;40.123904,-349.569894;38.727077,-351.381385;336.142392,-396.361683;335.627567,-398.306565;37.330249,-353.192876;35.933422,-355.004367;335.112743,-400.251448;334.597919,-402.196331;34.536594,-356.815858;33.139767,-358.627349;334.083094,-404.141214;333.568270,-406.086096;31.742939,-360.438840;30.346112,-362.250331;333.053445,-408.030979;332.538621,-409.975862;28.949285,-364.061822;27.552457,-365.873313;332.023797,-411.920745;331.508972,-413.865627;26.155630,-367.684803;24.758802,-369.496294;330.994148,-415.810510;330.479324,-417.755393;23.361975,-371.307785;21.965147,-373.119276;329.964499,-419.700276;329.449675,-421.645158;20.568320,-374.930767;19.171492,-376.742258;328.934850,-423.590041;328.420026,-425.534924;17.774665,-378.553749;16.377837,-380.365240;327.905202,-427.479807;327.390377,-429.424689;14.981010,-382.176731;13.584182,-383.988222;326.875553,-431.369572;326.360728,-433.314455;12.187355,-385.799713;10.790527,-387.611204;325.845904,-435.259338;325.331080,-437.204220;9.393700,-389.422695;7.996873,-391.234186;324.816255,-439.149103;324.301431,-441.093986;6.600045,-393.045677;5.203218,-394.857168;323.786606,-443.038869;323.271782,-444.983751;3.806390,-396.668659;2.409563,-398.480150;322.756958,-446.928634;322.242133,-448.873517;1.012735,-400.291641;-0.384092,-402.103132;321.727309,-450.818399;321.212484,-452.763282;-1.780920,-403.914623;-3.177747,-405.726114;320.697660,-454.708165;320.182836,-456.653048;-4.574575,-407.537605;-5.971402,-409.349096;319.668011,-458.597930;319.153187,-460.542813;-7.368230,-411.160586;-8.765057,-412.972077;318.638363,-462.487696;318.123538,-464.432579;-10.161885,-414.783568;-11.558712,-416.595059;317.608714,-466.377461;317.093889,-468.322344;-12.955539,-418.406550;-14.352367,-420.218041;316.579065,-470.267227;316.064241,-472.212110;-15.749194,-422.029532;-17.146022,-423.841023;315.549416,-474.156992;315.034592,-476.101875;-18.542849,-425.652514;-19.939677,-427.464005;314.519767,-478.046758;314.004943,-479.991641;-21.336504,-429.275496;-22.733332,-431.086987;313.490119,-481.936523;312.975294,-483.881406;-24.130159,-432.898478;-25.526987,-434.709969;312.460470,-485.826289;311.945645,-487.771172;-26.923814,-436.521460;-28.320642,-438.332951;311.430821,-489.716054;310.915997,-491.660937;-29.717469,-440.144442;-31.114297,-441.955933;310.401172,-493.605820;309.886348,-495.550703;-32.511124,-443.767424;-33.907951,-445.578915;309.371523,-497.495585;308.856699,-499.440468;-35.304779,-447.390406;-36.701606,-449.201897;308.341875,-501.385351;307.827050,-503.330234;-38.098434,-451.013388;-39.495261,-452.824879;307.312226,-505.275116;306.797402,-507.219999;-40.892089,-454.636370;-42.288916,-456.447860;306.282577,-509.164882;305.767753,-511.109765;-43.685744,-458.259351;-45.082571,-460.070842;305.252928,-513.054647;304.738104,-514.999530;-46.479399,-461.882333;-47.876226,-463.693824;304.223280,-516.944413;303.708455,-518.889296;-49.273054,-465.505315;-50.669881,-467.316806;303.193631,-520.834178;302.678806,-522.779061;-52.066709,-469.128297;-53.463536,-470.939788;302.163982,-524.723944;301.649158,-526.668827;-54.860363,-472.751279;-56.257191,-474.562770;301.134333,-528.613709;300.619509,-530.558592;-53.103034,-477.062540;-29.560792,-482.645749;300.104684,-532.503475;299.589860,-534.448358;-6.018549,-488.228958;17.523693,-493.812168;299.075036,-536.393240;298.560211,-538.338123;41.065935,-499.395377;64.608178,-504.978586;298.045387,-540.283006;297.530562,-542.227889;88.150420,-510.561795;111.692662,-516.145005;297.015738,-544.172771;296.500914,-546.117654;135.234905,-521.728214;158.777147,-527.311423;295.986089,-548.062537;295.471265,-550.007420;182.319389,-532.894632;205.861631,-538.477841;294.956441,-551.952302;294.441616,-553.897185;229.403874,-544.061051;252.946116,-549.644260;293.926792,-555.842068;293.411967,-557.786951;276.488358,-555.227469
LAND1.returnPathCoordinates=-1
LAND1.returnPathRawCoordinates=-1
LAND1.returnPointCoordinates=-1
LAND1.updateTime=2025-12-23 18\:41\:03
LAND1.updateTime=2025-12-23 19\:10\:14
LAND1.userId=-1
set.properties
@@ -1,5 +1,5 @@
#Mower Configuration Properties - Updated
#Tue Dec 23 19:08:18 CST 2025
#Current work land selection updated
#Wed Dec 24 16:28:00 CST 2025
appVersion=-1
boundaryLengthVisible=false
currentWorkLandNumber=LAND1
@@ -8,12 +8,12 @@
handheldMarkerId=1872
idleTrailDurationSeconds=60
manualBoundaryDrawingMode=false
mapScale=4.08
mapScale=0.78
measurementModeEnabled=false
mowerId=860
serialAutoConnect=true
serialBaudRate=115200
serialPortName=COM15
simCardNumber=-1
viewCenterX=-14.44
viewCenterY=-332.04
viewCenterX=-148.00
viewCenterY=424.51
src/bianjie/BoundaryLengthDrawer.java
@@ -143,3 +143,5 @@
src/bianjie/shudongdraw.java
@@ -205,3 +205,5 @@
src/denglu/Denglu.java
@@ -3,6 +3,11 @@
import homein.WenJianSuo;
import ui.UIConfig;
import zhuye.Shouye;
import gecaoji.Device;
import chuankou.SerialPortNativeLoader;
import set.Setsys;
import udpdell.UDPServer;
import user.Usrdell;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
@@ -151,11 +156,17 @@
        // ä¸»è¡¨å•区域
        JPanel formPanel = createFormPanel();
        
        // åŒ…装在滚动窗格中,以防内容显示不全
        JScrollPane scrollPane = new JScrollPane(formPanel);
        scrollPane.setBorder(null);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        scrollPane.getVerticalScrollBar().setUnitIncrement(16);
        // åº•部应用信息
        JPanel appInfoPanel = createAppInfoPanel();
        
        mainPanel.add(topPanel, BorderLayout.NORTH);
        mainPanel.add(formPanel, BorderLayout.CENTER);
        mainPanel.add(scrollPane, BorderLayout.CENTER);
        mainPanel.add(appInfoPanel, BorderLayout.SOUTH);
        
        add(mainPanel);
@@ -430,10 +441,17 @@
            usernameField.setText("");
        }
        
        // å¦‚果密码为-1,清空密码框
        String savedPassword = UserChuShiHua.getProperty("password");
        if (savedPassword != null && savedPassword.equals("-1")) {
            passwordField.setText("");
        // åŠ è½½è®°ä½æˆ‘çŠ¶æ€
        String rememberPwd = UserChuShiHua.getProperty("rememberPassword");
        boolean isRemember = "1".equals(rememberPwd);
        rememberMe.setSelected(isRemember);
        // å¦‚果记住我被选中,填充密码
        if (isRemember) {
             String savedPassword = UserChuShiHua.getProperty("password");
             if (savedPassword != null && !savedPassword.equals("-1")) {
                 passwordField.setText(savedPassword);
             }
        }
    }
@@ -473,20 +491,18 @@
        
        // éªŒè¯ç”¨æˆ·åå’Œå¯†ç 
        if (validateLogin(username, password)) {
            JOptionPane.showMessageDialog(this,
                "登录成功!",
                "成功",
                JOptionPane.INFORMATION_MESSAGE);
            // æ›´æ–°æœ€åŽç™»å½•æ—¶é—´
            UserChuShiHua.updateProperty("lastLoginTime", String.valueOf(System.currentTimeMillis()));
            
            // å¦‚果记住我被选中,保存用户名
            // ä¿å­˜è®°ä½æˆ‘状态
            if (rememberMe.isSelected()) {
                UserChuShiHua.updateProperty("rememberPassword", "1");
                UserChuShiHua.updateProperty("userName", username);
            } else {
                UserChuShiHua.updateProperty("rememberPassword", "0");
            }
            
            // è¿™é‡Œå¯ä»¥æ·»åŠ è·³è½¬åˆ°ä¸»ç•Œé¢çš„ä»£ç 
            // å…³é—­ç™»å½•窗口并打开首页
            openMainApplication();
            
        } else {
@@ -522,10 +538,10 @@
            Shouye homePanel = new Shouye();
            mainFrame.setContentPane(homePanel);
            mainFrame.pack();
            int targetWidth = Math.max(mainFrame.getWidth(), 480);
            int targetHeight = Math.max(mainFrame.getHeight(), 800);
            mainFrame.setSize(targetWidth, targetHeight);
            // è®¾ç½®ä¸Žç™»å½•页面相同的尺寸
            mainFrame.setSize(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT);
            mainFrame.setMinimumSize(new Dimension(UIConfig.DIALOG_WIDTH, UIConfig.DIALOG_HEIGHT));
            mainFrame.setResizable(false);
            mainFrame.setLocationRelativeTo(null);
            mainFrame.setVisible(true);
@@ -540,5 +556,63 @@
        RegistrationFrame registerFrame = new RegistrationFrame(this, currentLanguageCode);
        registerFrame.setVisible(true);
    }
    /**
     * ç¨‹åºå…¥å£ç‚¹
     * é›†æˆHomein类的初始化逻辑
     */
    public static void main(String[] args) {
        // æ£€æŸ¥ç¨‹åºæ˜¯å¦å·²ç»è¿è¡Œ
        if (WenJianSuo.isAlreadyRunning()) {
            JOptionPane.showMessageDialog(null,
                "程序已经在运行中!\n不能同时打开多个实例。",
                "警告",
                JOptionPane.WARNING_MESSAGE);
            System.exit(0);
            return;
        }
        // æ·»åŠ å…³é—­é’©å­ï¼Œç¡®ä¿ç¨‹åºé€€å‡ºæ—¶é‡Šæ”¾é”
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            WenJianSuo.releaseLock();
        }));
        try {
            SerialPortNativeLoader.ensureLibraryPresent();
            // åˆå§‹åŒ–数据
            UserChuShiHua.initialize();
            Usrdell.initialize(); // åˆå§‹åŒ–用户属性
            Setsys setsys = new Setsys();
            setsys.initializeFromProperties();
            Device.initializeActiveDevice(setsys.getMowerId());
            UDPServer.startAsync();//启动数据接收线程
            // æ˜¾ç¤ºåˆå§‹æ•°æ®
            System.out.println("初始用户名: " + UserChuShiHua.getProperty("userName"));
            System.out.println("初始密码: " + UserChuShiHua.getProperty("password"));
            // å¯åŠ¨ç™»å½•ç•Œé¢
            EventQueue.invokeLater(() -> {
                try {
                    new Denglu().setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                    JOptionPane.showMessageDialog(null,
                        "登录界面启动失败: " + e.getMessage(),
                        "错误",
                        JOptionPane.ERROR_MESSAGE);
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,
                "程序启动失败: " + e.getMessage(),
                "错误",
                JOptionPane.ERROR_MESSAGE);
        }
    }
   
}
src/homein/Homein.java
@@ -1,72 +1,11 @@
package homein;
import denglu.UserChuShiHua;
import gecaoji.Device;
import chuankou.SerialPortAutoConnector;
import chuankou.SerialPortNativeLoader;
import set.Setsys;
import udpdell.UDPServer;
import denglu.Denglu;
import java.awt.EventQueue;
import javax.swing.JOptionPane;
public class Homein {
    /**
     * ç¨‹åºå…¥å£ç‚¹ - å·²è¿ç§»åˆ°Dengluç±»
     * ä¿ç•™æ­¤æ–¹æ³•以保持向后兼容性,实际调用Denglu.main
     */
    public static void main(String[] args) {
        // æ£€æŸ¥ç¨‹åºæ˜¯å¦å·²ç»è¿è¡Œ
        if (WenJianSuo.isAlreadyRunning()) {
            JOptionPane.showMessageDialog(null,
                "程序已经在运行中!\n不能同时打开多个实例。",
                "警告",
                JOptionPane.WARNING_MESSAGE);
            System.exit(0);
            return;
        }
        // æ·»åŠ å…³é—­é’©å­ï¼Œç¡®ä¿ç¨‹åºé€€å‡ºæ—¶é‡Šæ”¾é”
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            WenJianSuo.releaseLock();
        }));
        try {
            SerialPortNativeLoader.ensureLibraryPresent();
            // åˆå§‹åŒ–数据
            UserChuShiHua.initialize();
            Setsys setsys = new Setsys();
            setsys.initializeFromProperties();
            Device.initializeActiveDevice(setsys.getMowerId());
            UDPServer.startAsync();//启动数据接收线程
//            SerialPortAutoConnector.initialize();//启动串口自动连接
            // æ˜¾ç¤ºåˆå§‹æ•°æ®
            System.out.println("初始用户名: " + UserChuShiHua.getProperty("userName"));
            System.out.println("初始密码: " + UserChuShiHua.getProperty("password"));
            // å¯åŠ¨ç™»å½•ç•Œé¢
            startLoginInterface();
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,
                "程序启动失败: " + e.getMessage(),
                "错误",
                JOptionPane.ERROR_MESSAGE);
        }
    }
    private static void startLoginInterface() {
        // åœ¨EDT中启动登录界面
        EventQueue.invokeLater(() -> {
            try {
                new Denglu().setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
                JOptionPane.showMessageDialog(null,
                    "登录界面启动失败: " + e.getMessage(),
                    "错误",
                    JOptionPane.ERROR_MESSAGE);
            }
        });
        Denglu.main(args);
    }
}
src/lujing/ObstaclePathPlanner.java
@@ -542,3 +542,5 @@
src/set/Sets.java
@@ -97,15 +97,22 @@
        // åˆ›å»ºè®¾ç½®é¡¹é¢æ¿ï¼ˆåœ†è§’白色面板)
        JPanel settingsPanel = createSettingsPanel();
        
        // åˆ›å»ºæ»šåŠ¨é¢æ¿
        JScrollPane scrollPane = new JScrollPane(settingsPanel);
        scrollPane.setBorder(null); // åŽ»é™¤è¾¹æ¡†
        scrollPane.getViewport().setBackground(BACKGROUND_COLOR); // è®¾ç½®è§†å£èƒŒæ™¯è‰²ä¸Žä¸»èƒŒæ™¯ä¸€è‡´
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); // ç¦æ­¢æ°´å¹³æ»šåЍ
        scrollPane.getVerticalScrollBar().setUnitIncrement(16); // å¢žåŠ æ»šåŠ¨é€Ÿåº¦
        // æ·»åŠ ç»„ä»¶åˆ°ä¸»é¢æ¿
        mainPanel.add(settingsPanel, BorderLayout.CENTER);
        mainPanel.add(scrollPane, BorderLayout.CENTER);
        
        add(mainPanel, BorderLayout.CENTER);
    }
    
    private JPanel createSettingsPanel() {
        // åˆ›å»ºåœ†è§’白色面板容器
        JPanel container = new JPanel() {
        JPanel container = new ScrollablePanel() {
            @Override
            protected void paintComponent(Graphics g) {
                Graphics2D g2d = (Graphics2D) g.create();
@@ -1756,6 +1763,38 @@
        timer.start();
    }
    
    /**
     * å¯æ»šåŠ¨çš„é¢æ¿ï¼Œå¼ºåˆ¶å®½åº¦é€‚åº”è§†å£
     */
    private class ScrollablePanel extends JPanel implements Scrollable {
        private static final long serialVersionUID = 1L;
        @Override
        public Dimension getPreferredScrollableViewportSize() {
            return getPreferredSize();
        }
        @Override
        public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
            return 16;
        }
        @Override
        public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
            return 16;
        }
        @Override
        public boolean getScrollableTracksViewportWidth() {
            return true; // å¼ºåˆ¶å®½åº¦é€‚应视口,防止水平滚动
        }
        @Override
        public boolean getScrollableTracksViewportHeight() {
            return false;
        }
    }
    @Override
    public void setVisible(boolean visible) {
        if (visible) {
src/udpdell/UDPServer.java
@@ -1,5 +1,4 @@
package udpdell;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
@@ -7,11 +6,8 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import Mqttmessage.Client;
import gecaoji.Device;
import zhuye.Coordinate;
import publicway.Gpstoxuzuobiao;
public class UDPServer {
@@ -37,7 +33,6 @@
        thread.setDaemon(false); // ä¿æŒ JVM æŒç»­å­˜æ´»
        thread.start();
        serverThread = thread;
//      Client.test();
        return thread;
    }
src/user/Usr.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,171 @@
package user;
/**
 * ç”¨æˆ·ä¿¡æ¯ç±»
 * åŒ…含user.properties文件中的所有属性
 */
public class Usr {
    // ç”¨æˆ·é‚®ç®±
    private String email;
    // è¯­è¨€è®¾ç½®
    private String language;
    // æœ€åŽç™»å½•æ—¶é—´
    private String lastLoginTime;
    // å¯†ç 
    private String password;
    // æ³¨å†Œæ—¶é—´
    private String registrationTime;
    // ç”¨æˆ·çŠ¶æ€
    private String status;
    // ç”¨æˆ·ID
    private String userId;
    // ç”¨æˆ·å
    private String userName;
    // æ˜¯å¦è®°ä½ç™»å½•密码:1表示记住,0表示不记住
    private String rememberPassword;
    /**
     * èŽ·å–ç”¨æˆ·é‚®ç®±
     * @return ç”¨æˆ·é‚®ç®±
     */
    public String getEmail() {
        return email;
    }
    /**
     * è®¾ç½®ç”¨æˆ·é‚®ç®±
     * @param email ç”¨æˆ·é‚®ç®±
     */
    public void setEmail(String email) {
        this.email = email;
    }
    /**
     * èŽ·å–è¯­è¨€è®¾ç½®
     * @return è¯­è¨€è®¾ç½®
     */
    public String getLanguage() {
        return language;
    }
    /**
     * è®¾ç½®è¯­è¨€è®¾ç½®
     * @param language è¯­è¨€è®¾ç½®
     */
    public void setLanguage(String language) {
        this.language = language;
    }
    /**
     * èŽ·å–æœ€åŽç™»å½•æ—¶é—´
     * @return æœ€åŽç™»å½•æ—¶é—´
     */
    public String getLastLoginTime() {
        return lastLoginTime;
    }
    /**
     * è®¾ç½®æœ€åŽç™»å½•æ—¶é—´
     * @param lastLoginTime æœ€åŽç™»å½•æ—¶é—´
     */
    public void setLastLoginTime(String lastLoginTime) {
        this.lastLoginTime = lastLoginTime;
    }
    /**
     * èŽ·å–å¯†ç 
     * @return å¯†ç 
     */
    public String getPassword() {
        return password;
    }
    /**
     * è®¾ç½®å¯†ç 
     * @param password å¯†ç 
     */
    public void setPassword(String password) {
        this.password = password;
    }
    /**
     * èŽ·å–æ³¨å†Œæ—¶é—´
     * @return æ³¨å†Œæ—¶é—´
     */
    public String getRegistrationTime() {
        return registrationTime;
    }
    /**
     * è®¾ç½®æ³¨å†Œæ—¶é—´
     * @param registrationTime æ³¨å†Œæ—¶é—´
     */
    public void setRegistrationTime(String registrationTime) {
        this.registrationTime = registrationTime;
    }
    /**
     * èŽ·å–ç”¨æˆ·çŠ¶æ€
     * @return ç”¨æˆ·çŠ¶æ€
     */
    public String getStatus() {
        return status;
    }
    /**
     * è®¾ç½®ç”¨æˆ·çŠ¶æ€
     * @param status ç”¨æˆ·çŠ¶æ€
     */
    public void setStatus(String status) {
        this.status = status;
    }
    /**
     * èŽ·å–ç”¨æˆ·ID
     * @return ç”¨æˆ·ID
     */
    public String getUserId() {
        return userId;
    }
    /**
     * è®¾ç½®ç”¨æˆ·ID
     * @param userId ç”¨æˆ·ID
     */
    public void setUserId(String userId) {
        this.userId = userId;
    }
    /**
     * èŽ·å–ç”¨æˆ·å
     * @return ç”¨æˆ·å
     */
    public String getUserName() {
        return userName;
    }
    /**
     * è®¾ç½®ç”¨æˆ·å
     * @param userName ç”¨æˆ·å
     */
    public void setUserName(String userName) {
        this.userName = userName;
    }
    /**
     * èŽ·å–æ˜¯å¦è®°ä½ç™»å½•å¯†ç 
     * @return æ˜¯å¦è®°ä½ç™»å½•密码(1表示记住,0表示不记住)
     */
    public String getRememberPassword() {
        return rememberPassword;
    }
    /**
     * è®¾ç½®æ˜¯å¦è®°ä½ç™»å½•密码
     * @param rememberPassword æ˜¯å¦è®°ä½ç™»å½•密码(1表示记住,0表示不记住)
     */
    public void setRememberPassword(String rememberPassword) {
        this.rememberPassword = rememberPassword;
    }
}
src/user/Usrdell.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,314 @@
package user;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
/**
 * ç”¨æˆ·å±žæ€§ç®¡ç†ç±»
 * è´Ÿè´£åˆå§‹åŒ–加载user.properties中的属性值,并提供获取和修改功能
 */
public class Usrdell {
    private static final String PROPERTIES_FILE = "user.properties";
    private static Properties userProperties;
    // å±žæ€§é”®åå¸¸é‡
    private static final String KEY_EMAIL = "email";
    private static final String KEY_LANGUAGE = "language";
    private static final String KEY_LAST_LOGIN_TIME = "lastLoginTime";
    private static final String KEY_PASSWORD = "password";
    private static final String KEY_REGISTRATION_TIME = "registrationTime";
    private static final String KEY_STATUS = "status";
    private static final String KEY_USER_ID = "userId";
    private static final String KEY_USER_NAME = "userName";
    private static final String KEY_REMEMBER_PASSWORD = "rememberPassword";
    /**
     * åˆå§‹åŒ–方法:从user.properties文件加载所有属性值到内存
     */
    public static void initialize() {
        synchronized (Usrdell.class) {
            userProperties = new Properties();
            try (FileInputStream input = new FileInputStream(PROPERTIES_FILE)) {
                userProperties.load(input);
                System.out.println("用户属性初始化成功!");
            } catch (IOException e) {
                System.err.println("初始化失败,文件未找到或读取错误: " + e.getMessage());
                // å¦‚果文件不存在,创建默认属性
                userProperties = new Properties();
            }
            // ç¡®ä¿rememberPassword属性存在,如果不存在则设置为默认值"0"
            if (!userProperties.containsKey(KEY_REMEMBER_PASSWORD)) {
                userProperties.setProperty(KEY_REMEMBER_PASSWORD, "0");
                // ä¿å­˜åˆ°æ–‡ä»¶
                try (FileOutputStream output = new FileOutputStream(PROPERTIES_FILE)) {
                    userProperties.store(output, "Updated User Properties");
                } catch (IOException e) {
                    System.err.println("保存默认rememberPassword属性失败: " + e.getMessage());
                }
            }
        }
    }
    /**
     * åˆå§‹åŒ–并获取所有属性值,返回Usr对象
     * @return åŒ…含所有属性值的Usr对象
     */
    public static Usr initializeAndGetAll() {
        if (userProperties == null) {
            initialize();
        }
        Usr usr = new Usr();
        usr.setEmail(getProperty(KEY_EMAIL));
        usr.setLanguage(getProperty(KEY_LANGUAGE));
        usr.setLastLoginTime(getProperty(KEY_LAST_LOGIN_TIME));
        usr.setPassword(getProperty(KEY_PASSWORD));
        usr.setRegistrationTime(getProperty(KEY_REGISTRATION_TIME));
        usr.setStatus(getProperty(KEY_STATUS));
        usr.setUserId(getProperty(KEY_USER_ID));
        usr.setUserName(getProperty(KEY_USER_NAME));
        usr.setRememberPassword(getProperty(KEY_REMEMBER_PASSWORD));
        return usr;
    }
    /**
     * èŽ·å–æŒ‡å®šå±žæ€§çš„å€¼
     * @param key å±žæ€§é”®å
     * @return å±žæ€§å€¼ï¼Œå¦‚果不存在返回null
     */
    public static String getProperty(String key) {
        if (userProperties == null) {
            initialize();
        }
        String value = userProperties.getProperty(key);
        if (value == null || value.trim().isEmpty() || "-1".equals(value.trim())) {
            return null;
        }
        return value.trim();
    }
    /**
     * æ›´æ–°å±žæ€§å€¼å¹¶ä¿å­˜åˆ°æ–‡ä»¶
     * @param key å±žæ€§é”®å
     * @param value å±žæ€§å€¼
     */
    public static void updateProperty(String key, String value) {
        synchronized (Usrdell.class) {
            if (userProperties == null) {
                initialize();
            }
            if (value == null || value.trim().isEmpty()) {
                userProperties.setProperty(key, "-1");
            } else {
                userProperties.setProperty(key, value.trim());
            }
            try (FileOutputStream output = new FileOutputStream(PROPERTIES_FILE)) {
                userProperties.store(output, "Updated User Properties");
            } catch (IOException e) {
                System.err.println("更新失败,文件写入错误: " + e.getMessage());
            }
        }
    }
    /**
     * èŽ·å–ç”¨æˆ·é‚®ç®±
     * @return ç”¨æˆ·é‚®ç®±
     */
    public static String getEmail() {
        return getProperty(KEY_EMAIL);
    }
    /**
     * è®¾ç½®ç”¨æˆ·é‚®ç®±
     * @param email ç”¨æˆ·é‚®ç®±
     */
    public static void setEmail(String email) {
        updateProperty(KEY_EMAIL, email);
    }
    /**
     * èŽ·å–è¯­è¨€è®¾ç½®
     * @return è¯­è¨€è®¾ç½®
     */
    public static String getLanguage() {
        return getProperty(KEY_LANGUAGE);
    }
    /**
     * è®¾ç½®è¯­è¨€è®¾ç½®
     * @param language è¯­è¨€è®¾ç½®
     */
    public static void setLanguage(String language) {
        updateProperty(KEY_LANGUAGE, language);
    }
    /**
     * èŽ·å–æœ€åŽç™»å½•æ—¶é—´
     * @return æœ€åŽç™»å½•æ—¶é—´
     */
    public static String getLastLoginTime() {
        return getProperty(KEY_LAST_LOGIN_TIME);
    }
    /**
     * è®¾ç½®æœ€åŽç™»å½•æ—¶é—´
     * @param lastLoginTime æœ€åŽç™»å½•æ—¶é—´
     */
    public static void setLastLoginTime(String lastLoginTime) {
        updateProperty(KEY_LAST_LOGIN_TIME, lastLoginTime);
    }
    /**
     * èŽ·å–å¯†ç 
     * @return å¯†ç 
     */
    public static String getPassword() {
        return getProperty(KEY_PASSWORD);
    }
    /**
     * è®¾ç½®å¯†ç 
     * @param password å¯†ç 
     */
    public static void setPassword(String password) {
        updateProperty(KEY_PASSWORD, password);
    }
    /**
     * èŽ·å–æ³¨å†Œæ—¶é—´
     * @return æ³¨å†Œæ—¶é—´
     */
    public static String getRegistrationTime() {
        return getProperty(KEY_REGISTRATION_TIME);
    }
    /**
     * è®¾ç½®æ³¨å†Œæ—¶é—´
     * @param registrationTime æ³¨å†Œæ—¶é—´
     */
    public static void setRegistrationTime(String registrationTime) {
        updateProperty(KEY_REGISTRATION_TIME, registrationTime);
    }
    /**
     * èŽ·å–ç”¨æˆ·çŠ¶æ€
     * @return ç”¨æˆ·çŠ¶æ€
     */
    public static String getStatus() {
        return getProperty(KEY_STATUS);
    }
    /**
     * è®¾ç½®ç”¨æˆ·çŠ¶æ€
     * @param status ç”¨æˆ·çŠ¶æ€
     */
    public static void setStatus(String status) {
        updateProperty(KEY_STATUS, status);
    }
    /**
     * èŽ·å–ç”¨æˆ·ID
     * @return ç”¨æˆ·ID
     */
    public static String getUserId() {
        return getProperty(KEY_USER_ID);
    }
    /**
     * è®¾ç½®ç”¨æˆ·ID
     * @param userId ç”¨æˆ·ID
     */
    public static void setUserId(String userId) {
        updateProperty(KEY_USER_ID, userId);
    }
    /**
     * èŽ·å–ç”¨æˆ·å
     * @return ç”¨æˆ·å
     */
    public static String getUserName() {
        return getProperty(KEY_USER_NAME);
    }
    /**
     * è®¾ç½®ç”¨æˆ·å
     * @param userName ç”¨æˆ·å
     */
    public static void setUserName(String userName) {
        updateProperty(KEY_USER_NAME, userName);
    }
    /**
     * èŽ·å–æ˜¯å¦è®°ä½ç™»å½•å¯†ç 
     * @return æ˜¯å¦è®°ä½ç™»å½•密码(1表示记住,0表示不记住),如果未设置则返回"0"
     */
    public static String getRememberPassword() {
        String value = getProperty(KEY_REMEMBER_PASSWORD);
        return value != null ? value : "0"; // é»˜è®¤è¿”回"0"表示不记住
    }
    /**
     * è®¾ç½®æ˜¯å¦è®°ä½ç™»å½•密码
     * @param rememberPassword æ˜¯å¦è®°ä½ç™»å½•密码(1表示记住,0表示不记住)
     */
    public static void setRememberPassword(String rememberPassword) {
        updateProperty(KEY_REMEMBER_PASSWORD, rememberPassword);
    }
    /**
     * æ‰¹é‡æ›´æ–°ç”¨æˆ·å±žæ€§
     * @param usr åŒ…含要更新属性值的Usr对象
     */
    public static void updateAll(Usr usr) {
        if (usr == null) {
            return;
        }
        synchronized (Usrdell.class) {
            if (userProperties == null) {
                initialize();
            }
            if (usr.getEmail() != null) {
                userProperties.setProperty(KEY_EMAIL, usr.getEmail());
            }
            if (usr.getLanguage() != null) {
                userProperties.setProperty(KEY_LANGUAGE, usr.getLanguage());
            }
            if (usr.getLastLoginTime() != null) {
                userProperties.setProperty(KEY_LAST_LOGIN_TIME, usr.getLastLoginTime());
            }
            if (usr.getPassword() != null) {
                userProperties.setProperty(KEY_PASSWORD, usr.getPassword());
            }
            if (usr.getRegistrationTime() != null) {
                userProperties.setProperty(KEY_REGISTRATION_TIME, usr.getRegistrationTime());
            }
            if (usr.getStatus() != null) {
                userProperties.setProperty(KEY_STATUS, usr.getStatus());
            }
            if (usr.getUserId() != null) {
                userProperties.setProperty(KEY_USER_ID, usr.getUserId());
            }
            if (usr.getUserName() != null) {
                userProperties.setProperty(KEY_USER_NAME, usr.getUserName());
            }
            if (usr.getRememberPassword() != null) {
                userProperties.setProperty(KEY_REMEMBER_PASSWORD, usr.getRememberPassword());
            }
            try (FileOutputStream output = new FileOutputStream(PROPERTIES_FILE)) {
                userProperties.store(output, "Updated User Properties");
            } catch (IOException e) {
                System.err.println("批量更新失败,文件写入错误: " + e.getMessage());
            }
        }
    }
}
src/zhuye/Shouye.java
@@ -4391,17 +4391,4 @@
        visualizationPanel.repaint();
    }
    // æµ‹è¯•方法
    public static void main(String[] args) {
        JFrame frame = new JFrame("AutoMow - é¦–页");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 800);
        frame.setLocationRelativeTo(null);
        Shouye shouye = new Shouye();
        frame.add(shouye);
        frame.setVisible(true);
        UDPServer.startAsync();//启动数据接收线程
    }
}
src/zhuye/celiangmoshi.java
@@ -90,3 +90,5 @@
user.properties
@@ -1,10 +1,11 @@
#Updated User Properties
#Tue Dec 09 17:21:03 CST 2025
#Wed Dec 24 16:28:00 CST 2025
email=789
language=zh
lastLoginTime=-1
lastLoginTime=1766564880280
password=123
registrationTime=-1
rememberPassword=1
status=-1
userId=-1
userName=233