ExceptionInInitializerError no Stitcher com JavaCV para Android
-
26-12-2019 - |
Pergunta
Estou usando este código para costura de imagens com JavaCV no Android:
public void ImageStitching() {
Stitcher stitcher = Stitcher.createDefault(false);
MatVector images = new MatVector(2);
images.put(0,cvLoadImage("sample1.png"));
images.put(1,cvLoadImage("sample2.png"));
IplImage result = new IplImage(null);
int status = stitcher.stitch(images,result);
if( status == Stitcher.OK )
{
cvSaveImage("result.png", result);
}
}
Mas quando executo, o app trava e o log mostra o seguinte erro:
java.lang.ExceptionInInitializerError at ...
e o erro aponta para a inicialização do Stitcher, a primeira linha do meu código.Se eu tentar fazer Stitcher stitcher;
não quebra, mas não posso fazer mais nada porque o costurador não foi inicializado.Se eu tentar inicializá-lo para null
ele trava com o mesmo erro.
Alguma ideia sobre o problema?Estou pesquisando há algum tempo e todas as pessoas usam isso e parece funcionar.
Solução 2
OK, entendi.
O problema era que a biblioteca opencv_stitching.so estava apenas na pasta armeabi e eu precisava na armeabi-v7a.Não posso declarar o Stitcher e inicializá-lo.
Outras dicas
ExceptionInInitializerError
Sinaliza que ocorreu uma exceção inesperada em um inicializador estático.Um ExceptionInInitializerError é lançado para indicar que ocorreu uma exceção durante a avaliação de um inicializador estático ou o inicializador de uma variável estática.
eu faria algo do tipo
Stitcher stitcher;
{
try {
stitcher = Stitcher.createDefault(false);
} catch (Throwable t) {
t.printStackTrace();
throw t;
}
}
e veja o que realmente acontece - a menos que você já tenha essa informação no causado por cláusula do rastreamento de exceção.
PS às vezes ocorrem erros quando uma classe é inicializada no thread errado (por exemplo, nas versões anteriores do Android, a classe AsyncTask exigia inicialização explícita no thread principal em um aplicativo que, de outra forma, carregaria essa classe em um thread de trabalho).