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

标签 java unknown-host

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

代码:

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

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

DNS Record not found

您必须进行一些谷歌搜索,以了解雅虎是否仍然支持该天气协议(protocol),如果支持,该协议(protocol)的新主机名是什么。这个API page from yahoo来找我搜索yahoo Weather xml

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

如果 DNS 未返回有关地址的任何信息,则浏览器通常会返回类似 ERR_NAME_NOT_RESOLVED (chrome) 错误的内容,并且您的 Java 代码会抛出类似 UnknownHostException 的内容。

关于java - 由于 UnknownHostException,天气应用程序无法显示温度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49414222/

相关文章:

java 计算器文本字段

android - 如何解决 java.net.UnknownHostException

java - 网络代码有时会抛出 UnknownHostException

java - 当我尝试使用网络 IP ping 我自己的电脑时,出现 java.net.UnknownHostException 的原因可能是什么?

android - 无法解析主机 : URL No address associated with hostname

java - 如何处理 com.android.volley.NoConnectionError : java.net.UnknownHostException

java - 在 LibGDX 中逐像素绘制形状

Java 执行器服务 : should I put a lock before to use execute?

Java、单例元素修改、软件模式

java - 尝试连接到 RDS 时 AWS EC2 间歇性 UnknownHostException