天气预报 空气质量查询系统,Java swing 窗体,完整源码 下载直接运行

今天为大家分享一个java语言编写的天气预报 空气质量查询系统,目前系统功能已经很全面,后续会进一步完善。整个系统界面漂亮,有完整得源码,希望大家可以喜欢。喜欢的帮忙点赞和关注。一起编程、一起进步

开发环境

开发语言为Java,开发环境Eclipse或者IDEA都可以。数据库采用:MySQL。运行主程序,或者执行打开JAR文件即可以运行本程序。

系统框架

利用JDK自带的SWING框架开发,不需要安装第三方JAR包

主要功能

1 注册API,从风和天气https://www.qweather.com/实时返回天气等数据

2 解析返回数据:对返回的JSON数据进行解析

3 Java UI对天气数据进行显示。显示最近8小时天气信息

4 用户可以根据省、市、县等 根据条件查询天气信息,查询后的天气,马上更新在主面板上

实现效果

1 主界面

程序主要一个主界面,可以采取下钻的方式显示一周的天气。先选省份、然后选城市、再选取对应的区域。然后点击查询。实时获取4小时内的天气情况。天气分半个小时显示一次。显示的天气信息包含以下些信息:时间、温度、天气类型、风力、降雨情况。所有数据都是实时抓取的,获取的数据源从https://www.qweather.com/获取。

2 代码界面

把代码从Eclipse导入后,运行Main.Java文件,出现主界面。也可以打包成JAR文件,独立运行整个程序。

主要代码

package com.weather.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.weather.model.*;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class WeatherUtil {
    
    //用户key
    private static final String key = "********";
    //实时天气预报查询地址
    private static final String NOW_WEATHER_URL = "https://free-api.heweather.com/s6/weather/now?";
    //逐小时天气查询地址
    private static final String HOURLY_WEATHER_URL = "https://free-api.heweather.com/s6/weather/hourly?";
    //三天天气预报
    private static final String DAILY_WEATHER_URL = "https://free-api.heweather.com/s6/weather/forecast?";
    //生活指数查询地址
    private static final String LIFE_STYLE_URL = "https://free-api.heweather.com/s6/weather/lifestyle?";
    
    //返回json字符串数据
    public static String getJsonStr(String url){
        System.out.println("psost url:"+url);
        String jsonStr = "";
        try{
        URL realUrl = new URL(url);
        URLConnection connection = realUrl.openConnection();
        connection.connect();
        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));
        
        String line;
        while((line = reader.readLine()) != null){
            jsonStr += line;
        }
        System.out.println("return result:"+jsonStr);
        reader.close();
        }catch (Exception e) {  
            System.out.println("发送GET请求出现异常!" + e);  
            //e.printStackTrace();  
            System.out.println("发送GET请求出现异常!请检查网络!");
            return "error";
        }  
        return jsonStr;
    }
    
    //查询实时天气,返回Now_Weather对象
    public static Now_Weather getNowWeather(String location) {
        Now_Weather now_Weather = null;
        StringBuilder parameters = new StringBuilder();
        try {
            parameters.append("location="+URLEncoder.encode(location, "UTF-8").toString()+"&key="+key);
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        String jsonStr = getJsonStr(NOW_WEATHER_URL+parameters);
        
        String regex = "\\{\"cloud\":.*?\\}";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(jsonStr);
        
        String resultStr = null;
        while(matcher.find()) {
            resultStr = matcher.group(0);
        }
        //System.out.println(resultStr);
        //json字符串转换成now_Weather对象
        if(resultStr != null) {
            JSONObject jsonObject = JSONObject.fromObject(resultStr);
            now_Weather = (Now_Weather)JSONObject.toBean(jsonObject, Now_Weather.class);
        }
        
        //设置LocationAndUpdateTime
        now_Weather.setLocationAndUpdateTime(getLocationAndUpdateTime(jsonStr));
        
        jsonStr = getJsonStr(LIFE_STYLE_URL+parameters);
        regex = "\"txt\":\"(.*?)\"";
        pattern = Pattern.compile(regex);
        matcher = pattern.matcher(jsonStr);
        while(matcher.find()) {
            now_Weather.setSuggestion(matcher.group(1));    
            break;    //只取今天的生活指数建议
        }
        return now_Weather;
    }
    
    //逐小时天气预报,返回List<Hourly_Weather>
    public static List<Hourly_Weather> getHourlyWeathers(String location){
        
        
        List<Hourly_Weather> hourly_Weathers = new ArrayList<>();
        StringBuilder parameters = new StringBuilder();
        try {
            parameters.append("location="+URLEncoder.encode(location, "UTF-8").toString()+"&key="+key);
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        String jsonStr = getJsonStr( HOURLY_WEATHER_URL + parameters);
        System.out.println("hour return:"+HOURLY_WEATHER_URL + parameters);
        String regex = "\\[\\{\"cloud.*?\\]";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(jsonStr);
        
        String resultStr = null;
        while(matcher.find()) {
            resultStr = matcher.group(0);
        }
        
        if(resultStr != null) {
            //System.out.println(resultStr);
            JSONArray jsonArray = JSONArray.fromObject(resultStr);
            //json字符串转换成对象数组
            for(int i = 0; i < jsonArray.size(); i++) {
                JSONObject jObject = jsonArray.getJSONObject(i);
                Hourly_Weather hourly_Weather = (Hourly_Weather) JSONObject.toBean(jObject,Hourly_Weather.class);
                hourly_Weather.setLocationAndUpdateTime(getLocationAndUpdateTime(jsonStr));
                hourly_Weathers.add(hourly_Weather);
            }
        }
        return hourly_Weathers;
    }
    
    //查询三天天气预报,返回对象数组
    public static List<Daily_Weather> getDailyWeathers(String location) {
        List<Daily_Weather> daily_Weathers = new ArrayList<>();
        
        StringBuilder parameters = new StringBuilder();
        try {
            parameters.append("location="+URLEncoder.encode(location, "UTF-8").toString()+"&key="+key);
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        
        String jsonStr = getJsonStr(DAILY_WEATHER_URL + parameters);
        String regex = "\\[\\{\"cond_code_d.*?\\]";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(jsonStr);
        
        String resultStr = "";
        while(matcher.find()) {
            resultStr = matcher.group(0);
        }
        //System.out.println(resultStr3);
        //json字符串转换成对象数组
        if(resultStr != null) {
            JSONArray jsonArray = JSONArray.fromObject(resultStr);
            for(int i = 0; i < jsonArray.size(); i++) {
                JSONObject jObject = jsonArray.getJSONObject(i);
                Daily_Weather daily_Weather = (Daily_Weather)JSONObject.toBean(jObject,Daily_Weather.class);
                daily_Weather.setLocationAndUpdateTime(getLocationAndUpdateTime(jsonStr));
                daily_Weathers.add(daily_Weather);
            }
        }
        return daily_Weathers;
    }
    
    public static LocationAndUpdateTime getLocationAndUpdateTime(String jsonStr) {
        System.out.println("json"+jsonStr);
        
        LocationAndUpdateTime locationAndUpdateTime = null;
        //匹配城市信息
        String regex = "\\{\"cid\".*?\\}";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(jsonStr);
        
        String resultStr = "";
        while(matcher.find()) {
            resultStr = matcher.group(0);
        }
        
        if(resultStr.equals("")) {
            return null;
        }
        
        //将最后一个大括号替换为逗号,拼接上匹配的时间,成为完整json字符串
        resultStr = resultStr.substring(0, resultStr.length()-1)+",";
        
        //匹配更新时间
        regex = "\"loc\".*?\\}";
        pattern = Pattern.compile(regex);
        matcher = pattern.matcher(jsonStr);
        while(matcher.find()) {
            resultStr += matcher.group(0);
        }
        
        JSONObject jsonObject = JSONObject.fromObject(resultStr);
        locationAndUpdateTime = (LocationAndUpdateTime)JSONObject.toBean(jsonObject, LocationAndUpdateTime.class);
        return locationAndUpdateTime;
    }
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

计算机程序

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值