gpt4 book ai didi

java - 程序由于变量 “may be uninitialized”而无法运行?

转载 作者:行者123 更新时间:2023-12-02 11:13:46 26 4
gpt4 key购买 nike

我正在尝试为从rss feed中解析xml创建新线程。当我单击运行时,它说有错误,请更正等。我的项目中有2个类(class)。另一个类没有错误,并且下面的此类仅警告说try/catch语句中的许多内容可能尚未初始化。我理解这一点,并认为我仍然应该能够运行该程序,我希望它们能够被初始化,如果它们不是很好,我想了解一下。这真的是怎么回事,还是我错过了什么?我认为,如果某些东西可能未初始化但不一定是未初始化的,它将可以编译。

public class RssParse extends Thread  {
Thread th=new Thread() {
public void run(){
System.out.println("1");
URL iotd;
try {
iotd = new URL("http://www.nasa.gov/rss/image_of_the_day.rss");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("2");
BufferedReader in;

try {
in = new BufferedReader(new InputStreamReader(iotd.openStream()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

System.out.println("3");
XmlPullParserFactory factory;
try {
factory = XmlPullParserFactory.newInstance();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

factory.setNamespaceAware(true);
System.out.println("4");
XmlPullParser xpp;
try {
xpp = factory.newPullParser();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("5");
try {
xpp.setInput(in);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("6");

int eventType;
try {
eventType = xpp.getEventType();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(eventType+"!!!!!!!!!!!!!!!!");
while(eventType!=XmlPullParser.END_DOCUMENT){
if(eventType==XmlPullParser.START_DOCUMENT){
System.out.println("start");
}
}

try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}//method
};//thread

}//class

最佳答案

看一下这个try/catch块,例如:

    URL iotd;
try {
iotd = new URL("http://www.nasa.gov/rss/image_of_the_day.rss");
} catch (MalformedURLException e) {
e.printStackTrace();
}

如果 iotd = new URL("...")失败, iotd将保持未初始化状态。

有两种方法可以解决此问题:
  • iotd分配一个默认值,例如:URL iotd = null;但是,这很不好,因为如果以后使用iotd,其值可能为null并可能引发NullPointerException。
  • 如果出现故障,请停止执行函数,而不仅仅是打印堆栈跟踪。例如,您可以在return块中添加catch语句:
    URL iotd;
    try {
    iotd = new URL("http://www.nasa.gov/rss/image_of_the_day.rss");
    } catch (MalformedURLException e) {
    e.printStackTrace();
    return;
    }
  • 关于java - 程序由于变量 “may be uninitialized”而无法运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11411701/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com