由于 UnknownHostException,天气应用程序无法显示温度

Weather app cannot display temperature because of a UnknownHostException

我正在学习使用天气创建天气应用程序的教程 Library.When 我试图显示某个地方的温度 我得到一个 error.I 认为一定是由于library.I 的更新我将分享代码,视频教程link 和错误,以便您可以准确指出错误。

代码:

public class HomeGUI extends javax.swing.JFrame {

    public HomeGUI() {
        initComponents();
        getWeather();
    }
    private void getWeather() {
        WeatherDoc doc=new WeatherDoc("29226594","c");
        WeatherDisplay disp=new WeatherDisplay();
        System.out.println(disp.getTemperature());    
    }

    private void initComponents() {
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 300, Short.MAX_VALUE)
        );

        pack();
    }                       

    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (Exception ex) {
            java.util.logging.Logger.getLogger(HomeGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new HomeGUI().setVisible(true);
            }
        });
    }

    ...
}

错误:

run:
Mar 21, 2018 11:59:48 PM com.teknikindustries.yahooweather.WeatherDoc <init>
null
SEVERE: null
java.net.UnknownHostException: xml.weather.yahoo.com
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at java.net.Socket.connect(Socket.java:538)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
    at sun.net.www.http.HttpClient.New(HttpClient.java:339)
    at sun.net.www.http.HttpClient.New(HttpClient.java:357)
    ...

BUILD SUCCESSFUL (total time: 10 seconds)

如有任何帮助,我们将不胜感激。

在 Java 中,异常尝试提供有关特定问题的信息。在你的情况下:

java.net.UnknownHostException: xml.weather.yahoo.com

这个例外应该是显而易见的。主机名 xml.weather.yahoo.com 未知。这不是任何代码的问题,只是雅虎似乎不再发布该名称。如果您查看 DNS results from this tool,您会看到:

DNS Record not found

您需要做一些事情 google-ing 来查明 Yahoo 是否仍然支持该天气协议,如果支持,该协议的新主机名是什么。这个 API page from yahoo 是我在 yahoo weather xml.

上搜索的结果

当浏览器,或者在您的情况下是代码中的 http 客户端,通过名称(google.com、cnn.com、xml.weather.yahoo.com 等访问服务时。 ), 发生的第一件事是域名服务 (DNS) 请求查找名称以便找到 IP 地址。浏览器或代码使用该 IP 地址连接到服务并获取结果。

如果 DNS return 没有关于该地址的任何信息,那么浏览器通常 return 会出现类似于 ERR_NAME_NOT_RESOLVED (chrome) 的错误并且您的 Java 代码抛出类似 UnknownHostException 的东西。