У меня есть вопрос об переопределении. Мне нужно переопределить один метод из библиотеки Cling UPnP. Таким образом, я расширил класс обслуживания и написал следующий код:Java: NoClassDefFoundError в переопределенном методе
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-файле. –
Они не просто внутренние классы, они анонимные внутренние классы (оба) для загрузки. – Dunes