【发布时间】:2011-12-14 09:36:58
【问题描述】:
我对覆盖有疑问。我需要覆盖 Cling UPnP 库中的一种方法。于是我扩展了一个服务类,写了如下代码:
public class UpnpBrowseService extends AndroidUpnpServiceImpl
{
@Override
protected AndroidUpnpServiceConfiguration createConfiguration(WifiManager wifiManager)
{
return new AndroidUpnpServiceConfiguration(wifiManager)
{
@Override
public StreamClient createStreamClient()
{
return new StreamClientImpl(new StreamClientConfigurationImpl() {
public int getConnectionTimeoutSeconds() {
return 2;
}
public int getDataReadTimeoutSeconds() {
return 3;
}
public boolean getStaleCheckingEnabled() {
// comment from AndroidHttpClient.java:
//
// Turn off stale checking. Our connections break all the time anyway,
// and it's not worth it to pay the penalty of checking every time.
return false;
}
public int getRequestRetryCount() {
// since "connections break all the time anyway", limit number of retries to
// minimize time spent in HttpClient.execute()
return 1;
}
});
}
};
}
}
出于测试目的,'createStreamClient()' 方法现在与父类中的方法相同。 Source code of parent class is here.
如果我评论此方法,它可以正常工作。但是如果我使用我的重写方法,我会得到 NoClassDefFoundError:
12-14 09:52:12.110: E/AndroidRuntime(20784): FATAL EXCEPTION: Thread 18 (Active: 6)
12-14 09:52:12.110: E/AndroidRuntime(20784): java.lang.NoClassDefFoundError: org.teleal.cling.transport.impl.StreamClientImpl$1$1
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.transport.impl.StreamClientImpl$1.createURLStreamHandler(StreamClientImpl.java:77)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.net.URL.setupStreamHandler(URL.java:551)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.net.URL.<init>(URL.java:286)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.net.URL.<init>(URL.java:157)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.header.LocationHeader.setString(LocationHeader.java:45)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.header.UpnpHeader.newInstance(UpnpHeader.java:171)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.UpnpHeaders.parseHeaders(UpnpHeaders.java:68)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.UpnpHeaders.getAsArray(UpnpHeaders.java:136)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.UpnpHeaders.getFirstHeader(UpnpHeaders.java:143)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.model.message.discovery.IncomingSearchResponse.isSearchResponseMessage(IncomingSearchResponse.java:46)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.protocol.async.ReceivingSearchResponse.execute(ReceivingSearchResponse.java:54)
12-14 09:52:12.110: E/AndroidRuntime(20784): at org.teleal.cling.protocol.ReceivingAsync.run(ReceivingAsync.java:64)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-14 09:52:12.110: E/AndroidRuntime(20784): at java.lang.Thread.run(Thread.java:1019)
我在解决这种 NoClassDefFoundError 方面有点新手,我不知道如何处理它。我想知道您是否可以帮我解决这个问题,或者至少指导我找到一些方法来确定这个问题的原因。
我发现这个异常是在静态元素有一些失败的时候发生的,但是这个类没有。
非常感谢!
【问题讨论】:
-
如果我是 Java 运行时环境,我也会抱怨 :D。运行时说它找不到内部内部类。您是否尝试过将最内部的班级上移一级?或者可以测试当您在自己的 .java-File 中将两个内部类实现为自己的类时会发生什么。
-
它们不仅仅是内部类,它们是匿名的内部类(它们都是)引导。
标签: java android overriding noclassdeffounderror