由于 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
的东西。
我正在学习使用天气创建天气应用程序的教程 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
.
如果 DNS return 没有关于该地址的任何信息,那么浏览器通常 return 会出现类似于 ERR_NAME_NOT_RESOLVED
(chrome) 的错误并且您的 Java 代码抛出类似 UnknownHostException
的东西。