用java swing写的一个显示时间和实时天气的小程序

第一次写博客,这个TimeAndWeather程序最初是来源于我想写一个显示时间的小程序,后来偶然在知乎上看到一个关于python获取天气的帖子,便想在这个程序上加上显示天气的功能,花了一些时间学习了一点关于python的知识,后来虽然实现了java调用python爬取天气并显示,但是因为要用到jython包,体积有点大,而且好像有一个在中文路径下无法调用的问题,所以最后还是用java重写了天气功能,最后贴上代码和解析json需要的包。

<a data-cke-saved-href="https://pan.baidu.com/s/15AuFqVjnJ9JTXcg07nvAbA" href="https://pan.baidu.com/s/15AuFqVjnJ9JTXcg07nvAbA">点击打开链接</a>
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;


public class TimeAndWeatherUsedByJava extends JFrame {
	// 时间格式
	private SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
	private SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
	private static String cityJson = "{'北京':54511,'昌平':54499,'朝阳':54433,'大兴':54594,'房山':54596,'丰台':54514,'海淀':54399,'怀柔':54419,'门头沟':54505,'平谷':54424,'石景山':54513,'顺义':54398,'通州':54431,'延庆':54406,'巴南':57518,'北碚':57511,'璧山':57514,'长寿':57520,'城口':57333,'潼南':57409,'大足':57502,'垫江':57425,'丰都':57523,'奉节':57348,'涪陵':57522,'合川':57512,'江津':57517,'开县':57338,'梁平':57426,'南川':57519,'彭水':57537,'黔江':57536,'綦江':57612,'荣昌':57505,'石柱':57438,'铜梁':57510,'万盛':57509,'万州':57432,'武隆':57525,'巫山':57349,'巫溪':57345,'秀山':57635,'永川':57506,'酉阳':57633,'渝北':57513,'云阳':57339,'重庆':57516,'崇明':58366,'奉贤':58463,'嘉定':58365,'金山':58460,'闵行':58361,'南汇':58369,'宝山':58362,'青浦':58461,'上海':58367,'松江':58462,'宝坻':54525,'静海':54619,'蓟县':54428,'宁河':54529,'西青':54527,'武清':54523,'安庆':58424,'枞阳':58420,'怀宁':58416,'太湖':58414,'桐城':58319,'望江':58418,'宿松':58417,'岳西':58317,'潜山':58415,'蚌埠':58221,'怀远':58127,'五河':58129,'固镇':58128,'利辛':58117,'蒙城':58118,'涡阳':58114,'亳州':58102,'巢湖':58326,'含山':58330,'和县':58331,'庐江':58327,'无为':58329,'定远':58225,'凤阳':58222,'来安':58234,'全椒':58230,'滁州':58236,'明光':58223,'天长':58240,'界首':58108,'临泉':58107,'阜南':58202,'阜阳':58203,'太和':58109,'长丰':58220,'合肥':58321,'肥东':58323,'肥西':58320,'淮北':58116,'凤台':58212,'淮南':58224,'歙县':58530,'祁门':58520,'黄山风景区':58437,'休宁':58534,'黟县':58523,'黄山市':58531,'霍邱':58214,'霍山':58314,'六安':58311,'舒城':58316,'金寨':58306,'寿县':58215,'当涂':58335,'马鞍山':58336,'东至':58419,'青阳':58421,'石台':58428,'九华':58423,'池州':58427,'铜陵':58429,'繁昌':58337,'芜湖县':58338,'芜湖':58334,'南陵':58431,'泗县':58126,'灵璧':58125,'宿州':58122,'砀山':58015,'萧县':58016,'广德':58441,'泾县':58432,'旌德':58435,'绩溪':58438,'宁国':58436,'郎溪':58442,'宣城':58433,'福清':58942,'长乐':58941,'罗源':58845,'连江':58848,'平潭':58944,'闽侯':58844,'永泰':58932,'福州':58847,'连城':58912,'龙岩':58927,'长汀':58911,'武平':58917,'上杭':58918,'永定':59113,'漳平':58926,'光泽':58724,'建瓯':58737,'建阳':58734,'南平':58834,'浦城':58731,'顺昌':58823,'松溪':58735,'邵武':58725,'武夷山':58730,'政和':58736,'福鼎':58754,'古田':58836,'宁德':58846,'福安':58748,'寿宁':58744,'屏南':58933,'霞浦':58843,'柘荣':58749,'周宁':58747,'莆田':58946,'秀屿港':58938,'仙游':58936,'德化':58935,'崇武':59133,'安溪':58929,'晋江':59137,'南安':59131,'永春':58934,'建宁':58822,'明溪':58824,'将乐':58821,'大田':58923,'宁化':58818,'三明':58828,'清流':58819,'沙县':58826,'泰宁':58820,'永安':58921,'尤溪':58837,'厦门':59134,'同安':59130,'东山':59321,'长泰':59122,'华安':58928,'南靖':59124,'龙海':59127,'平和':59125,'云霄':59322,'漳浦':59129,'漳州':59126,'诏安':59320,'会宁':52993,'景泰':52797,'白银':52896,'靖远':52895,'临洮':52986,'安定':52995,'通渭':53908,'陇西':56092,'岷县':56093,'渭源':52998,'漳县':56091,'迭部':56084,'舟曲':56094,'夏河':52978,'碌曲':56071,'临潭':56081,'合作':56080,'玛曲':56074,'卓尼':56082,'永昌':52674,'敦煌':52418,'金塔':52447,'酒泉':52533,'玉门':52436,'永登':52885,'榆中':52983,'兰州':52889,'广河':52982,'和政':52985,'康乐':52988,'东乡':52981,'临夏':52984,'永靖':52980,'徽县':57110,'成县':57102,'两当':57111,'礼县':57007,'康县':57105,'文县':56192,'武都':56096,'崇信':53928,'静宁':53906,'华亭':53927,'灵台':53924,'泾川':53926,'崆峒':53915,'庄浪':53917,'合水':53934,'环县':53821,'宁县':53937,'正宁':53935,'华池':53930,'庆城':53829,'西峰':53923,'镇原':53925,'麦积':57014,'秦安':57002,'清水':57011,'甘谷':57001,'武山':57004,'天水':57006,'张家川':57012,'古浪':52784,'民勤':52681,'武威':52679,'高台':52546,'民乐':52656,'山丹':52661,'张掖':52652,'临泽':52557,'肃南':52643,'饶平':59313,'潮州':59312,'东莞':59289,'佛山':59288,'顺德':59480,'三水':59279,'广州':59287,'从化':59285,'增城':59294,'番禺':59481,'花都':59284,'河源':59293,'龙川':59107,'连平':59096,'紫金':59304,'和平':59099,'博罗':59297,'龙门':59290,'惠东':59492,'恩平':59477,'新会':59476,'开平':59475,'惠来':59317,'揭阳':59315,'揭西':59306,'普宁':59314,'高州':59653,'化州':59655,'电白':59664,'茂名':59659,'信宜':59456,'大埔':59116,'平远':59106,'兴宁':59109,'丰顺':59310,'蕉岭':59114,'佛冈':59087,'连山':59074,'连南':59071,'清远':59280,'连州':59072,'英德':59088,'阳山':59075,'澄海':59319,'汕头':59316,'南澳':59324,'潮阳':59318,'海丰':59500,'陆丰':59502,'汕尾':59501,'南雄':57996,'乐昌':57988,'乳源':59081,'韶关':59082,'始兴':59090,'新丰':59097,'翁源':59094,'仁化':57989,'深圳':59493,'阳江':59663,'阳春':59469,'罗定':59462,'新兴':59470,'郁南':59268,'云浮':59471,'吴川':59656,'雷州':59750,'湛江':59658,'廉江':59654,'德庆':59269,'怀集':59270,'四会':59276,'封开':59264,'中山':59485,'珠海':59488,'斗门':59487,'德保':59215,'百色':59211,'乐业':59012,'凌云':59015,'那坡':59209,'隆林':59001,'田东':59224,'田林':59017,'田阳':59213,'西林':59004,'合浦':59640,'北海':59644,'巴马':59027,'东兰':59025,'环江':59031,'罗城':59033,'宜州':59034,'天峨':57927,'河池':59023,'南丹':59022,'都安':59037,'富川':59061,'钟山':59064,'昭平':59059,'武宣':59246,'象州':59241,'忻城':59038,'柳城':59041,'柳江':59047,'柳州':59046,'融水':57948,'鹿寨':59045,'三江':57941,'崇左':59425,'横县':59441,'隆安':59229,'宾阳':59238,'马山':59230,'南宁':59431,'上林':59235,'武鸣':59237,'邕宁':59435,'灵山':59446,'浦北':59448,'钦州':59632,'岑溪':59454,'蒙山':59058,'藤县':59256,'苍梧':59266,'梧州':59265,'北流':59451,'博白':59449,'陆川':59457,'容县':59452,'关岭':57903,'安顺':57806,'平坝':57814,'镇宁':57809,'普定':57808,'紫云':57910,'毕节':57707,'大方':57708,'金沙':57714,'黔西':57803,'纳雍':57800,'织金':57805,'威宁':56691,'赫章':56598,'贵阳':57816,'开阳':57719,'花溪':57914,'乌当':57915,'清镇':57813,'息烽':57718,'修文':57811,'盘县':56793,'岑巩':57735,'从江':57936,'黄平':57822,'丹寨':57829,'锦屏':57844,'凯里':57825,'剑河':57835,'雷山':57837,'榕江':57932,'麻江':57828,'黎平':57839,'三穗':57832,'台江':57834,'施秉':57737,'天柱':57840,'镇远':57738,'长顺':57818,'独山':57922,'都匀':57827,'贵定':57824,'福泉':57821,'荔波':57926,'龙里':57913,'罗甸':57916,'平塘':57921,'瓮安':57728,'三都':57923,'玉屏':57739,'惠水':57912,'册亨':57909,'普安':56792,'晴隆':57900,'望谟':57906,'安龙':57908,'兴义':57907,'贞丰':57905,'兴仁':57902,'江口':57736,'石阡':57734,'思南':57731,'德江':57637,'松桃':57647,'铜仁':57741,'万山':57742,'沿河':57636,'印江':57732,'海口':59758,'昌江':59847,'乐东':59940,'白沙':59848,'陵水':59954,'琼中':59849,'保亭':59945,'澄迈':59843,'儋州':59845,'东方':59838,'临高':59842,'定安':59851,'三亚':59948,'屯昌':59854,'琼海':59855,'万宁':59951,'文昌':59856,'西沙永兴岛':59981,'安国':54604,'安新':54605,'定州':53696,'保定':54602,'高碑店':54506,'阜平':53690,'高阳':54603,'涞源':53599,'容城':54503,'曲阳':53682,'易县':54507,'顺平':53596,'涿州':54502,'泊头':54618,'沧州':54616,'河间':54614,'东光':54713,'青县':54615,'任丘':54610,'黄骅':54624,'吴桥':54717,'献县':54617,'盐山':54627,'承德':54423,'丰宁':54308,'宽城':54432,'隆化':54318,'承德县':54430,'滦平':54420,'围场':54311,'平泉':54319,'兴隆':54425,'大名':54804,'磁县':53897,'峰峰':53894,'肥乡':53980,'邯郸':53892,'馆陶':54809,'曲周':53893,'涉县':53886,'武安':53890,'内邱':53797,'阜城':54710,'衡水':54702,'冀州':54704,'饶阳':54606,'深州':54608,'故城':54707,'固安':54512,'廊坊':54515,'三河':54520,'霸州':54518,'文安':54612,'昌黎':54540,'抚宁':54541,'青龙':54436,'秦皇岛':54449,'栾城':53789,'平山':53694,'石家庄':53698,'无极':53699,'井陉':53693,'行唐':53688,'辛集':54701,'赵县':53784,'新乐':53695,'正定':53691,'赞皇':53795,'乐亭':54539,'滦县':54531,'迁西':54434,'迁安':54439,'唐山':54534,'唐海':54535,'遵化':54429,'玉田':54522,'临城':53792,'临西':54801,'隆尧':53794,'巨鹿':53799,'南宫':54705,'清河':54706,'沙河':53781,'威县':54800,'宁晋':53796,'邢台':53798,'赤城':54404,'沽源':54301,'崇礼':54304,'怀来':54405,'尚义':53397,'蔚县':53593,'康保':53392,'怀安':53491,'阳原':53492,'张北':53399,'宣化':53498,'张家口':54401,'涿鹿':54408,'林甸':50749,'肇源':50954,'肇州':50950,'加格达奇':50442,'呼中':50247,'漠河':50136,'呼玛':50353,'塔河':50246,'新林':50349,'阿城':50958,'宾县':50960,'哈尔滨':50953,'方正':50964,'尚志':50968,'木兰':50962,'双城':50955,'通河':50963,'延寿':50965,'五常':54080,'依兰':50877,'巴彦':50867,'绥滨':50787,'鹤岗':50775,'萝北':50776,'北安':50656,'黑河':50468,'孙吴':50564,'五大连池':50655,'嫩江':50557,'逊克':50566,'富锦':50788,'抚远':50779,'桦南':50879,'桦川':50878,'汤原':50871,'佳木斯':50873,'同江':50778,'鸡西':50978,'虎林':50983,'密山':50985,'鸡东':50987,'海林':54092,'东宁':54099,'林口':50979,'穆棱':54093,'牡丹江':54094,'宁安':54098,'绥芬河':54096,'拜泉':50755,'甘南':50741,'富裕':50742,'龙江':50739,'克山':50658,'泰来':50844,'齐齐哈尔':50745,'讷河':50646,'依安':50750,'宝清':50888,'集贤':50880,'双鸭山':50884,'安达':50854,'兰西':50859,'海伦':50756,'庆安':50861,'青冈':50851,'明水':50758,'望奎':50852,'肇东':50858,'嘉荫':50673,'乌伊岭':50674,'铁力':50862,'伊春':50774,'滑县':53995,'内黄县':53993,'林州市':53889,'汤阴县':53991,'安阳市':53898,'淇县':53974,'鹤壁':53990,'浚县':53992,'博爱县':53979,'孟州市':57072,'沁阳市':53972,'温县':57079,'武陟县':53987,'焦作市':53982,'修武县':53984,'济源':53978,'兰考':57093,'杞县':57096,'开封市':57091,'尉氏':57094,'通许':57191,'漯河市':57186,'临颍县':57183,'舞阳县':57185,'栾川县':57077,'洛阳市':57073,'汝阳县':57078,'嵩县':57162,'新安县':57070,'洛宁县':57066,'伊川县':57074,'宜阳县':57065,'偃师市':57076,'邓州':57274,'方城':57179,'南召':57176,'南阳市':57178,'内乡':57169,'唐河':57273,'社旗':57187,'淅川':57261,'桐柏':57285,'新野':57271,'镇平':57175,'宝丰':57181,'平顶山':57171,'郏县':57180,'鲁山':57173,'舞钢':57177,'汝州':57075,'叶县':57184,'范县':54903,'濮阳':54900,'清丰县':54902,'台前县':54817,'南乐县':54901,'灵宝':57056,'渑池':57063,'卢氏':57067,'三门峡':57051,'睢县':58001,'民权':58004,'商丘':58005,'永城':58111,'柘城':58007,'虞城':58006,'宁陵':58008,'长垣县':53998,'获嘉县':53988,'卫辉市':53994,'辉县市':53985,'新乡市':53986,'延津县':53997,'原阳县':53989,'封丘县':53983,'潢川':58207,'固始':58208,'光山':57299,'淮滨':58205,'新县':57396,'商城':58301,'信阳市':57297,'罗山':57298,'息县':57296,'长葛':57087,'许昌':57089,'禹州':57088,'鄢陵':57095,'襄城':57182,'登封市':57082,'巩义市':57080,'新密市':57085,'荥阳市':57081,'郑州':57083,'新郑市':57086,'中牟县':57090,'郸城县':58100,'扶沟县':57098,'淮阳县':57192,'商水县':57198,'鹿邑县':58101,'太康县':57099,'沈丘县':58104,'项城市':57196,'西华县':57193,'周口':57195,'平舆县':57292,'确山县':57294,'泌阳县':57281,'汝南县':57197,'上蔡县':57194,'遂平县':57189,'西平县':57188,'新蔡县':57293,'正阳县':57295,'驻马店市':57290,'鹤峰':57543,'恩施':57447,'建始':57445,'咸丰':57540,'宣恩':57541,'鄂州':57496,'红安':57398,'黄冈':57498,'蕲春':58408,'黄梅':58409,'麻城':57399,'罗田':58401,'武穴':58501,'浠水':58404,'大冶':57499,'阳新':58500,'黄石':58407,'潜江':57475,'神农架':57362,'仙桃':57485,'京山':57387,'荆门':57377,'钟祥':57378,'洪湖':57581,'监利':57573,'荆州':57476,'公安':57477,'石首':57571,'松滋':57469,'丹江口':57260,'十堰':57256,'房县':57259,'郧县':57253,'竹溪':57249,'竹山':57257,'随州':57381,'江夏':57493,'黄陂':57491,'武汉':57494,'新洲':57492,'蔡甸':57489,'保康':57361,'谷城':57268,'老河口':57265,'襄阳':57278,'南漳':57363,'宜城':57370,'枣阳':57279,'崇阳':57586,'通城':57589,'咸宁':57590,'通山':57595,'赤壁':57582,'安陆':57388,'汉川':57486,'大悟':57395,'孝感':57482,'云梦':57389,'应城':57481,'长阳':57464,'兴山':57359,'当阳':57460,'宜昌':57461,'宜都':57465,'枝江':57466,'远安':57368,'秭归':57358,'常德':57662,'临澧':57566,'汉寿':57663,'石门':57562,'澧县':57565,'桃源':57661,'湘江新区':57687,'宁乡':57678,'浏阳':57688,'郴州':57972,'桂东':57889,'安仁':57881,'嘉禾':57974,'桂阳':57973,'汝城':57985,'临武':57978,'宜章':57976,'永兴':57887,'资兴':57981,'常宁':57874,'衡阳县':57871,'衡山':57777,'耒阳':57876,'南岳':57776,'祁东':57870,'怀化':57749,'辰溪':57658,'会同':57842,'麻阳':57743,'靖州':57841,'新晃':57744,'溆浦':57752,'沅陵':57655,'芷江':57745,'冷水江':57760,'娄底':57763,'双峰':57774,'涟源':57762,'新化':57761,'城步':57857,'隆回':57767,'洞口':57758,'邵东':57769,'邵阳县':57860,'绥宁':57846,'武冈':57853,'新宁':57851,'邵阳市':57766,'新邵':57768,'湘潭':57773,'韶山':57771,'湘乡':57772,'保靖':57642,'古丈':57646,'花垣':57640,'吉首':57649,'凤凰':57740,'龙山':57544,'永顺':57643,'泸溪':57657,'安化':57669,'益阳':57674,'南县':57574,'桃江':57666,'沅江':57671,'道县':57965,'东安':57867,'江永':57969,'江华':59063,'蓝山':57975,'宁远':57966,'冷水滩':57865,'祁阳':57868,'新田':57971,'双牌':57962,'通道':57845,'永州':57866,'临湘':57585,'华容':57575,'汨罗':57680,'湘阴':57673,'平江':57682,'岳阳':57584,'桑植':57554,'张家界':57558,'慈利':57564,'茶陵':57882,'醴陵':57781,'炎陵':57886,'株洲':57780,'攸县':57779,'金坛':58342,'溧阳':58345,'常州':58343,'楚州':58145,'洪泽':58139,'涟水':58140,'盱眙':58138,'东海':58036,'赣榆':58040,'灌南':58048,'灌云':58047,'连云港':58044,'高淳':58339,'浦口':58237,'南京':58238,'溧水':58340,'海安':58254,'海门':58360,'启东':58269,'南通':58259,'如东':58264,'如皋':58255,'常熟':58352,'昆山':58356,'苏州':58349,'张家港':58353,'姜堰':58250,'泰兴':58249,'靖江':58257,'兴化':58243,'泰州':58246,'无锡':58354,'宜兴':58346,'江阴':58351,'沭阳':58038,'泗洪':58135,'泗阳':58132,'宿迁':58131,'睢宁':58130,'沛县':58013,'邳州':58026,'新沂':58035,'徐州':58027,'丰县':58012,'东台':58251,'大丰':58158,'阜宁':58143,'射阳':58150,'建湖':58146,'盐城':58154,'滨海':58049,'扬州':58245,'高邮':58241,'宝应':58148,'仪征':58242,'句容':58344,'丹阳':58341,'扬中':58247,'镇江':58248,'广昌':58813,'东乡':58618,'崇仁':58710,'抚州':58617,'金溪':58712,'南城':58715,'南丰':58718,'乐安':58706,'宜黄':58714,'资溪':58713,'崇义':57990,'大余':57994,'定南':59093,'会昌':58906,'安远':58907,'龙南':59092,'赣州':57993,'南康':57992,'宁都':58806,'全南':59091,'瑞金':58903,'上犹':57991,'信丰':57995,'石城':58814,'兴国':58804,'寻乌':59102,'于都':58905,'安福':57798,'井冈山':57894,'吉安':57799,'宁冈':57883,'吉水':58707,'泰和':57899,'遂川':57896,'万安':57895,'峡江':58704,'新干':58701,'永新':57891,'永丰':58705,'景德镇':58527,'乐平':58620,'德安':58508,'都昌':58517,'九江':58502,'湖口':58510,'瑞昌':58503,'庐山':58506,'武宁':58507,'修水':57598,'星子':58514,'永修':58509,'进贤':58614,'安义':58602,'新建':58693,'南昌':58606,'萍乡':57786,'莲花':57789,'广丰':58635,'德兴':58622,'横峰':58625,'铅山':58629,'婺源':58529,'万年':58615,'上饶':58637,'弋阳':58624,'余干':58612,'玉山':58634,'新余':57796,'分宜':57792,'丰城':58609,'奉新':58601,'高安':58605,'上高':57699,'铜鼓':57694,'靖安':58600,'宜丰':57696,'宜春':57793,'万载':57698,'樟树':58608,'鹰潭':58627,'贵溪':58626,'余江':58616,'大安':50945,'白城':50936,'通榆':54041,'洮南':50939,'镇赉':50940,'白山':54371,'长白':54386,'靖宇':54276,'临江':54374,'长春':54161,'德惠':54065,'九台':54069,'双阳':54165,'农安':54064,'榆树':54072,'桦甸':54273,'吉林':54172,'蛟河':54181,'舒兰':54076,'磐石':54263,'辽源':54260,'东丰':54261,'公主岭':54156,'梨树':54154,'四平':54157,'伊通':54164,'扶余':54063,'长岭':54049,'乾安':50948,'松原':50946,'前郭':50949,'辉南':54274,'集安':54377,'梅河口':54266,'柳河':54267,'通化县':54362,'和龙':54286,'珲春':54291,'龙井':54290,'敦化':54186,'安图':54187,'延吉':54292,'图们':54293,'鞍山':54339,'海城':54472,'台安':54336,'岫岩':54486,'本溪县':54349,'桓仁':54365,'本溪':54346,'北票':54323,'朝阳':54324,'凌源':54327,'建平':54326,'长海':54579,'大连':54662,'金州':54568,'普兰店':54569,'庄河':54584,'瓦房店':54563,'旅顺':54660,'宽甸':54493,'凤城':54494,'丹东':54497,'清原':54259,'抚顺':54351,'彰武':54236,'建昌':54452,'葫芦岛':54453,'兴城':54455,'绥中':54454,'北镇':54331,'黑山':54335,'义县':54334,'锦州':54337,'盘锦':54470,'盘山':54338,'法库':54245,'辽中':54332,'康平':54244,'沈阳':54342,'新民':54333,'昌图':54243,'铁岭':54249,'西丰':54252,'开原':54254,'大石桥':54475,'盖州':54474,'营口':54471,'阿拉善右旗':52576,'巴彦诺尔贡':52495,'额济纳旗':52267,'吉兰太':53502,'阿拉善左旗':53602,'雅布赖':52575,'白云鄂博':53343,'达尔罕茂明安联合旗':53352,'包头':53446,'满都拉':53149,'固阳':53357,'土默特右旗':53455,'杭锦后旗':53420,'临河':53513,'那仁宝力格':53083,'磴口':53419,'乌拉特前旗':53433,'乌拉特后旗':53324,'五原':53337,'乌拉特中旗':53336,'阿鲁科尔沁旗':54122,'八里罕':54316,'巴林右旗':54113,'敖汉旗':54225,'巴林左旗':54027,'喀喇沁旗':54313,'赤峰':54218,'林西':54115,'宁城':54320,'翁牛特旗':54213,'克什克腾旗':54117,'鄂托克旗':53529,'杭锦旗':53533,'达拉特旗':53457,'鄂托克前旗':53730,'乌审召':53547,'乌审旗':53644,'准格尔旗':53553,'伊金霍洛旗':53545,'和林格尔':53469,'呼和浩特':53463,'土默特左旗':53464,'清水河':53562,'托克托':53467,'武川':53368,'博克图':50632,'陈巴尔虎旗':50524,'阿荣旗':50647,'鄂伦春旗':50445,'额尔古纳':50425,'鄂温克旗':50525,'根河':50431,'海拉尔':50527,'莫力达瓦旗':50645,'满洲里':50514,'新巴尔虎左旗':50618,'新巴尔虎右旗':50603,'扎兰屯':50639,'牙克石':50526,'图里河':50434,'大佘太':53348,'浩尔吐':54024,'开鲁':54134,'巴雅尔吐胡硕':50928,'科尔沁左翼中旗':54047,'科尔沁左翼后旗':54231,'库伦旗':54234,'奈曼旗':54223,'舍伯吐':54039,'通辽':54135,'青龙山':54132,'扎鲁特旗':54026,'乌海':53512,'察哈尔右翼后旗':53384,'察哈尔右翼中旗':53378,'察哈尔右翼前旗':53481,'化德':53391,'丰镇':53484,'凉城':53475,'商都':53385,'集宁':53480,'四子王旗':53362,'兴和':53483,'卓资':53472,'阿巴嘎旗':53192,'东乌珠穆沁旗':50915,'多伦':54208,'宝过图':54226,'苏尼特右旗':53272,'二连浩特':53068,'苏尼特左旗':53195,'乌拉盖':50913,'镶黄旗':53289,'太仆寺旗':54305,'西乌珠穆沁旗':54012,'锡林浩特':54102,'正镶白旗':54204,'正兰旗':54205,'阿尔山':50727,'科尔沁右翼中旗':50937,'胡尔勒':50832,'索伦':50834,'乌兰浩特':50838,'扎赉特旗':50833,'突泉':50934,'固原':53817,'泾源':53916,'隆德':53914,'海原':53806,'西吉':53903,'惠农':53519,'平罗':53611,'陶乐':53615,'大武口':53518,'青铜峡':53617,'同心':53810,'盐池':53723,'中宁':53705,'吴忠':53612,'中卫':53704,'银川':53614,'永宁':53618,'贺兰':53610,'久治':56067,'玛多':56033,'达日':56046,'门源':52765,'平安':52875,'贵南':52955,'大柴旦':52713,'都兰':52836,'冷湖':52602,'茫崖':51886,'格尔木':52818,'河南':56065,'西宁':52866,'曲麻莱':56021,'囊谦':56125,'玉树':56029,'杂多':56018,'滨州':54734,'惠民':54725,'无棣':54722,'博兴':54737,'沾化':54730,'邹平':54822,'德州':54714,'乐陵':54726,'临邑':54712,'陵县':54715,'平原':54718,'宁津':54716,'禹城':54811,'东营':54736,'河口':54732,'垦利':54744,'广饶':54738,'曹县':58002,'定陶':54909,'东明':54908,'菏泽':54906,'单县':58011,'巨野':54914,'郓城':54905,'济阳':54821,'济南':54823,'平阴':54818,'章丘':54727,'济宁':54915,'金乡':54917,'嘉祥':54921,'汶上':54912,'梁山':54910,'泗水':54920,'曲阜':54918,'微山':58020,'兖州':54916,'鱼台':54907,'邹城':54919,'莱芜':54828,'莘县':54808,'东阿':54815,'高唐':54810,'冠县':54805,'临清':54802,'聊城':54806,'阳谷':54807,'费县':54929,'临沂':54938,'蒙阴':54923,'平邑':54925,'沂南':54935,'郯城':58034,'莒南':54939,'沂水':54932,'胶南':54943,'即墨':54855,'平度':54842,'胶州':54849,'青岛':54857,'五莲':54940,'日照':54945,'莒县':54936,'肥城':54819,'宁阳':54913,'东平':54911,'泰安':54827,'新泰':54922,'安丘':54844,'昌邑':54841,'高密':54846,'昌乐':54837,'青州':54831,'临朐':54835,'寿光':54832,'潍坊':54843,'诸城':54848,'荣成':54778,'石岛':54871,'乳山':54861,'文登':54777,'威海':54774,'福山':54764,'海阳':54863,'莱阳':54852,'莱州':54749,'龙口':54753,'蓬莱':54752,'栖霞':54759,'长岛':54751,'烟台':54765,'枣庄':58024,'台儿庄':58025,'滕州':54927,'博山':54825,'高青':54729,'沂源':54836,'淄川':54824,'淄博':54830,'白河':57254,'安康':57245,'汉阴':57233,'平利':57248,'宁陕':57137,'镇坪':57343,'旬阳':57242,'紫阳':57231,'岚皋':57247,'陈仓':57020,'凤翔':57025,'扶风':57026,'麟游':57022,'宝鸡':57016,'陇县':57003,'眉县':57027,'凤县':57113,'千阳':57021,'岐山':57024,'城固':57128,'佛坪':57134,'留坝':57124,'汉中':57127,'略阳':57106,'南郑':57213,'宁强':57211,'勉县':57119,'西乡':57129,'镇巴':57238,'洋县':57126,'丹凤':57153,'洛南':57057,'山阳':57155,'商南':57154,'镇安':57144,'柞水':57140,'铜川':53947,'耀县':57037,'宜君':53945,'白水':53941,'澄城':53949,'潼关':57054,'富平':57042,'大荔':57043,'合阳':53950,'韩城':53955,'华县':57049,'华阴':57055,'蒲城':53948,'渭南':57045,'高陵':57040,'户县':57132,'临潼':57044,'长安':57039,'周至':57032,'蓝田':57047,'西安':57036,'长武':53929,'淳化':57031,'泾阳':57033,'彬县':57023,'礼泉':57029,'乾县':57035,'兴平':57038,'咸阳':57048,'旬邑':53938,'永寿':57030,'安塞':53841,'富县':53931,'黄陵':53944,'黄龙':53946,'吴旗':53738,'延安':53845,'延长':53854,'甘泉':53848,'延川':53850,'志丹':53832,'子长':53748,'宜川':53857,'长子':53873,'壶关':53885,'长治':53882,'潞城':53880,'黎城':53878,'平顺':53888,'沁县':53872,'屯留':53879,'沁源':53875,'襄垣':53884,'武乡':53871,'大同':53487,'广灵':53590,'大同县':53488,'灵丘':53594,'浑源':53582,'太原南郊':53679,'天镇':53490,'阳高':53486,'左云':53573,'高平':53973,'晋城':53976,'陵川':53981,'沁水':53970,'阳城':53975,'和顺':53788,'灵石':53862,'介休':53863,'祁县':53770,'平遥':53778,'太谷':53775,'寿阳':53780,'昔阳':53783,'晋中':53776,'左权':53786,'榆社':53787,'大宁':53856,'安泽':53877,'汾西':53865,'浮山':53966,'古县':53874,'洪洞':53866,'侯马':53963,'霍州':53869,'吉县':53859,'临汾':53868,'曲沃':53961,'太原古交区':53763,'隰县':53853,'永和':53852,'乡宁':53953,'襄汾':53861,'翼城':53962,'方山':53760,'交城':53777,'交口':53860,'岚县':53665,'临县':53659,'汾阳':53769,'吕梁':53764,'柳林':53753,'石楼':53759,'文水':53771,'兴县':53664,'孝义':53768,'中阳':53767,'山阴':53576,'平鲁':53574,'应县':53584,'朔州':53578,'右玉':53478,'怀仁':53580,'娄烦':53669,'清徐':53774,'太原北郊':53677,'阳曲':53678,'太原':53772,'代县':53579,'定襄':53676,'保德':53660,'繁峙':53585,'静乐':53666,'河曲':53564,'岢岚':53662,'宁武':53577,'神池':53575,'五台县豆村':53681,'偏关':53565,'忻州':53674,'原平':53673,'五寨':53663,'五台山':53588,'阳泉':53782,'盂县':53685,'平定':53687,'河津':53957,'绛县':53965,'临猗':53958,'稷山':53954,'芮城':57053,'平陆':57061,'万荣':53956,'闻喜':53967,'新绛':53964,'永济':57052,'夏县':57060,'垣曲':53968,'运城':53959,'南坪':56097,'马尔康':56172,'若尔盖':56079,'红原':56173,'松潘':56182,'小金':56178,'巴中':57313,'南江':57216,'平昌':57324,'通江':57320,'崇庆':56181,'成都':56294,'都江堰':56188,'大邑':56285,'金堂':56296,'龙泉驿':56286,'郫县':56272,'蒲江':56281,'邛崃':56284,'双流':56288,'温江':56187,'新都':56290,'彭县':56189,'新津':56276,'大竹':57420,'开江':57329,'渠县':57413,'达州':57328,'宣汉':57326,'万源':57237,'德阳':56198,'广汉':56291,'绵竹':56186,'中江':56199,'什邡':56197,'巴塘':56247,'丹巴':56263,'白玉':56147,'道孚':56167,'德格':56144,'稻城':56357,'甘孜':56146,'得荣':56441,'九龙':56462,'理塘':56257,'康定':56374,'石渠':56038,'色达':56152,'泸定':56371,'炉霍':56158,'雅江':56267,'新龙':56251,'乡城':56443,'广安':57415,'武胜':57417,'邻水':57416,'苍溪':57303,'剑阁':57208,'青川':57204,'旺苍':57217,'广元':57206,'峨边':56387,'夹江':56382,'峨眉山':56385,'犍为':56389,'峨眉':56384,'乐山':56386,'沐川':56490,'马边':56480,'井研':56390,'会东':56675,'会理':56671,'金阳':56584,'雷波':56485,'冕宁':56474,'宁南':56578,'木里':56459,'普格':56575,'盐源':56565,'西昌':56571,'喜德':56478,'昭觉':56479,'越西':56475,'合江':57603,'泸州':57602,'叙永':57608,'古蔺':57605,'洪雅':56380,'丹棱':56381,'青神':56383,'彭山':56289,'仁寿':56297,'安县':56190,'绵阳':56196,'北川':56194,'江油':56195,'盐亭':57308,'三台':57307,'梓潼':57304,'平武':56193,'眉山':56391,'南部':57314,'南充':57411,'阆中':57306,'蓬安':57317,'仪陇':57315,'营山':57318,'资中':56393,'威远':56395,'隆昌':57507,'米易':56670,'攀枝花':56666,'盐边':56665,'蓬溪':57402,'射洪':57401,'遂宁':57405,'宝兴':56273,'汉源':56376,'名山':56280,'石棉':56378,'天全':56278,'雅安':56287,'高县':56592,'珙县':56499,'兴文':56496,'南溪':56493,'宜宾':56492,'长宁':56593,'荣县':56394,'荥经县':56373,'自贡':56396,'安岳':57408,'简阳':56295,'乐至':57407,'资阳':56298,'改则':55248,'狮泉河':55228,'帕里':55773,'昌都':56137,'洛隆':56223,'左贡':56331,'丁青':56116,'尼木':55585,'拉萨':55591,'墨竹贡卡':55593,'察隅':56434,'林芝':56312,'波密':56227,'班戈':55279,'嘉黎':56202,'安多':55294,'那曲':55299,'申扎':55472,'索县':56106,'日喀则':55578,'定日':55664,'浪卡子':55681,'隆子':55696,'阿拉尔':51730,'阿克苏':51628,'阿瓦提':51722,'库车':51644,'柯坪':51720,'乌什':51627,'沙雅':51639,'新和':51636,'福海':51068,'布尔津':51060,'富蕴':51087,'哈巴河':51053,'青河':51186,'阿勒泰':51076,'吉木乃':51059,'巴音布鲁克':51542,'和静':51559,'和硕':51568,'轮台':51642,'库尔勒':51656,'且末':51855,'若羌':51777,'焉耆':51567,'阿拉山口':51232,'精河':51334,'博乐':51238,'昌吉':51368,'木垒':51482,'奇台':51379,'吉木萨尔':51378,'天池':51470,'哈密':52203,'巴里坤':52101,'伊吾':52118,'和田':51828,'皮山':51818,'民丰':51839,'于田':51931,'巴楚':51716,'喀什':51709,'塔什库尔干':51804,'莎车':51811,'克拉玛依':51243,'乌恰':51705,'阿图什':51704,'阿合奇':51711,'石河子':51356,'额敏':51145,'沙湾':51357,'塔城':51133,'裕民':51137,'乌苏':51346,'吐鲁番':51573,'鄯善':51581,'托克逊':51571,'乌鲁木齐':51463,'霍尔果斯':51328,'尼勒克':51433,'特克斯':51438,'新源':51436,'伊宁市':51431,'昭苏':51437,'巩留':51435,'察布查尔':51430,'和丰':51156,'昌宁':56843,'保山':56748,'施甸':56842,'腾冲':56739,'龙陵':56841,'大姚':56761,'楚雄':56768,'禄丰':56777,'双柏':56862,'南华':56767,'牟定':56766,'武定':56774,'姚安':56764,'永仁':56669,'元谋':56763,'大理':56751,'洱源':56649,'宾川':56752,'鹤庆':56654,'弥渡':56755,'剑川':56646,'祥云':56756,'漾濞':56745,'南涧':56851,'永平':56746,'云龙':56742,'瑞丽':56838,'陇川':56835,'盈江':56836,'梁河':56840,'香格里拉':56543,'德钦':56444,'个旧':56984,'金平':56987,'红河':56975,'绿春':56978,'开远':56982,'建水':56973,'蒙自':56985,'泸西':56886,'弥勒':56885,'屏边':56986,'石屏':56970,'元阳':56976,'安宁':56863,'东川':56688,'呈贡':56882,'晋宁':56871,'富民':56772,'昆明':56778,'嵩明':56785,'石林':56881,'宜良':56880,'寻甸':56781,'禄劝':56775,'永胜':56652,'宁蒗':56567,'丽江':56651,'沧源':56944,'临沧':56951,'耿马':56946,'永德':56849,'双江':56950,'镇康':56839,'云县':56854,'凤庆':56846,'福贡':56641,'兰坪':56645,'陆良':56788,'富源':56790,'会泽':56684,'马龙':56782,'罗平':56891,'师宗':56883,'曲靖':56786,'景谷':56952,'澜沧':56954,'孟连':56949,'江城':56977,'宁洱':56961,'墨江':56962,'思茅':56964,'广南':59007,'富宁':59205,'马关':56995,'文山':56994,'西畴':56992,'麻栗坡':56996,'砚山':56991,'景洪':56959,'勐海':56958,'勐腊':56969,'澄江':56873,'峨山':56898,'华宁':56879,'江川':56876,'通海':56878,'新平':56869,'易门':56870,'元江':56966,'玉溪':56875,'鲁甸':56585,'绥江':56483,'威信':56596,'巧家':56673,'盐津':56497,'昭通':56586,'镇雄':56595,'彝良':56594,'淳安':58543,'富阳':58449,'杭州':58457,'建德':58544,'临安':58448,'桐庐':58542,'萧山':58459,'安吉':58446,'德清':58454,'长兴':58443,'湖州':58450,'海宁':58455,'嘉兴':58452,'海盐':58458,'桐乡':58456,'平湖':58464,'金华':58549,'兰溪':58548,'东阳':58558,'义乌':58557,'永康':58643,'浦江':58546,'缙云':58654,'龙泉':58647,'丽水':58646,'庆元':58745,'遂昌':58644,'青田':58657,'云和':58742,'慈溪':58467,'宁海':58567,'普陀':58570,'余姚':58468,'宁波':58562,'奉化':58565,'开化':58537,'衢州':58633,'江山':58632,'嵊州':58556,'诸暨':58550,'绍兴':58453,'洪家':58665,'温岭':58664,'仙居':58652,'天台':58559,'玉环':58667,'洞头':58760,'平阳':58751,'乐清':58656,'泰顺':58746,'瑞安':58752,'文成':58750,'温州':58659,'嵊泗':58472}";
	private static JSONObject cityId = JSONObject.fromObject(cityJson);
	private static String id = "57411";
	private static String city = "南充";
	static String weather = "实时天气数据";


	public TimeAndWeatherUsedByJava() {
		setTitle("TimeAndWeather");


		setLocationRelativeTo(null);// 居中显示


		setSize(450, 200); // 窗口大小


		setResizable(false);// 是否可以改变窗口大小


		this.getContentPane().add(new TimePanel());// 添加时间的JPanel面板


		setDefaultCloseOperation(EXIT_ON_CLOSE);// 设置关闭方式


		setVisible(true); // 可视化


		// 设置时间变化的任务
		Timer timer = new Timer();// 定时器
		Timer timer2 = new Timer();// 定时器
		timer.schedule(new DateAndTimeUpdate(), new Date(), 1000);// 时间定时更新(内容,开始时间,周期)
		timer2.schedule(new WeatherUpdate(), new Date(), 300000);// 天气定时更新(内容,开始时间,周期)
	}


	class DateAndTimeUpdate extends TimerTask {
		public void run() {
			// 刷新时间
			repaint();
		}
	}


	class WeatherUpdate extends TimerTask {
		public void run() {
			// 刷新天气
			weather = getWeather(getId());
		}
	}


	public static int getId() {
		try {
			id = cityId.getString(city);
		} catch (net.sf.json.JSONException e) {
			// TODO 自动生成的 catch 块
			System.out.println("没有找到这个城市!");
			System.out.println("默认南充!");
		}
		return Integer.parseInt(id);
	}


	public static String getWeather(int id) { // java解析json数据获取实时天气
		String url = "http://www.nmc.cn/f/rest/real/" + id;
		String weatherJson = "";
		BufferedReader in = null;
		try {
			String urlNameString = url;
			URL realUrl = new URL(urlNameString);// 打开和URL之间的连接


			URLConnection connection = realUrl.openConnection();// 建立实际的连接


			connection.connect();// 获取所有响应头字段


			// 定义 BufferedReader输入流来读取URL的响应
			in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));// 转码,避免中文乱码
			String line;
			while ((line = in.readLine()) != null) {
				weatherJson += line;// 得到的json数据
			}
		} catch (Exception e) {
			System.out.println("发送GET请求出现异常!" + e);
			e.printStackTrace();
			return "网络异常!";
		}
		// 使用finally块来关闭输入流
		finally {
			try {
				if (in != null) {
					in.close();
				}
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		try {
			JSONObject jsonObject = JSONObject.fromObject(weatherJson);
			String city = jsonObject.getJSONObject("station").getString("city");
			String info = jsonObject.getJSONObject("weather").getString("info");
			String temperature = jsonObject.getJSONObject("weather").getString("temperature");
			String direct = jsonObject.getJSONObject("wind").getString("direct");
			String speed = jsonObject.getJSONObject("wind").getString("speed");
			String humidity = jsonObject.getJSONObject("weather").getString("humidity");
			weather = city + " " + info + " " + temperature + "℃" + " " + direct + " " + speed + "m/s" + " " + humidity
					+ "%";
		} catch (JSONException e) {


			e.printStackTrace();
		}
		return weather;
	}


	class TimePanel extends JPanel {
		public TimePanel() {
			// TODO 自动生成的构造函数存根
			this.setLayout(null);
			this.setBackground(Color.DARK_GRAY);
			JPanel contentPane = new JPanel();
			contentPane.setLayout(new BorderLayout());
			JLabel jl1 = new JLabel("请选择城市/区县:");
			JTextField jt = new JTextField();
			JButton jb = new JButton("确认");
			jl1.setFont(new Font("华文仿宋", Font.PLAIN, 18));
			jb.setFont(new Font("华文仿宋", Font.PLAIN, 18));
			jt.setColumns(35);
			jb.setBackground(Color.ORANGE);
			contentPane.add(BorderLayout.WEST, jl1);
			contentPane.add(BorderLayout.CENTER, jt);
			contentPane.add(BorderLayout.EAST, jb);
			contentPane.setVisible(true);
			contentPane.setBounds(150, 0, 300, 25);
			contentPane.setBackground(Color.ORANGE);
			this.add(contentPane);
			jb.addActionListener(new ActionListener() {


				@Override
				public void actionPerformed(ActionEvent arg0) {
					// TODO 自动生成的方法存根
					city = jt.getText();
					weather = getWeather(getId());
					jt.setText("");
				}
			});
		}


		public void paint(Graphics g) {// swing Graphics类绘图
			super.paint(g);


			g.setColor(Color.MAGENTA);
			g.setFont(new Font("华文仿宋", Font.PLAIN, 30));
			g.drawString(date.format(new Date()), 0, 24);// 更新日期,画日期


			g.setColor(Color.cyan);
			g.setFont(new Font("华文仿宋", Font.PLAIN, 100));
			g.drawString(time.format(new Date()), 60, 130);// 更新时间,画时间


			g.setColor(Color.GREEN);
			g.setFont(new Font("华文仿宋", Font.PLAIN, 20));// 画天气
			g.drawString(weather, 0, 50);


			g.setColor(Color.CYAN);
			g.setFont(new Font("华文仿宋", Font.PLAIN, 15));// 署名
			g.drawString("Designed by Liujunhong", 290, 155);


		}
	}


	public static void main(String[] args) {
		new TimeAndWeatherUsedByJava();
	}
}

2018/8/1更新:

其实很容易就可以看出来,上面将城市ID放在一个json来获取其实是一种很笨的方法,有很大缺陷。所以使用百度地图API直接对城市名进行解析得到天气数据是一个很好的方法。只需要去百度地图Api网站申请免费的天气接口,替换链接,然后更替换json解析的相关代码就好了。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值