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

时间:2018-03-21 18:38:12

标签: java unknown-host

我正在按照教程使用天气库创建天气应用程序。当我试图显示某个地方的温度时,我收到了一个错误。我认为由于库的更新肯定会出现问题。我我将分享代码,视频教程链接和错误,以便您可以准确地指出错误。

CODE:

<HorizontalLayout/>

错误:

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);
            }
        });
    }

    ...
}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

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

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

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

DNS Record not found

你必须做一些google-ing来了解雅虎是否仍然支持该天气协议,如果是,那么该协议的新主机名是什么。我yahoo weather xml搜索了ERR_NAME_NOT_RESOLVED

&LT; tldr&GT;当一个浏览器,或者你的情况下是代码中的http客户端,通过名称访问服务(google.com,cnn.com,xml.weather.yahoo.com等)时,首先发生的是域名名称服务(DNS)请求查找名称,以便可以找到IP地址。然后是浏览器或代码用来连接服务并获得结果的IP地址。

如果DNS没有返回有关该地址的任何信息,那么浏览器通常会返回类似UnknownHostException(chrome)错误的内容,而您的Java代码会抛出answer = True myvar = f"the answer is {answer}" 之类的内容。 &LT; / tldr&GT;