2014-04-07 82 views
2

我正在創建一個可以過濾照片的Android應用程序。爲了執行這些濾鏡所需的圖像處理,我使用了ImageJ的API。用戶選擇要應用於對話框中的照片集的過濾器。在按下「OK」,然而,應用程序崩潰,並且以下輸出出現在logcat中(我使用Eclipse):將ImageJ集成到Android應用程序時出現問題

04-07 15:09:24.094: E/AndroidRuntime(14901): FATAL EXCEPTION: main 
04-07 15:09:24.094: E/AndroidRuntime(14901): Process: edu.wpi.khufnagle.lighthousenavigator, PID: 14901 
04-07 15:09:24.094: E/AndroidRuntime(14901): java.lang.NoClassDefFoundError: ij.io.Opener 
04-07 15:09:24.094: E/AndroidRuntime(14901): at edu.wpi.khufnagle.lighthousenavigator.filter.ImageManipulator.validateOriginalImage(ImageManipulator.java:38) 
04-07 15:09:24.094: E/AndroidRuntime(14901): at edu.wpi.khufnagle.lighthousenavigator.filter.LighthousePresenceFilter.<init>(LighthousePresenceFilter.java:120) 
04-07 15:09:24.094: E/AndroidRuntime(14901): at edu.wpi.khufnagle.lighthousenavigator.filter.PhotographFilter.filterPhotos(PhotographFilter.java:137) 
04-07 15:09:24.094: E/AndroidRuntime(14901): at edu.wpi.khufnagle.lighthousenavigator.PhotographsActivity$5.onClick(PhotographsActivity.java:623) 
04-07 15:09:24.094: E/AndroidRuntime(14901): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 
04-07 15:09:24.094: E/AndroidRuntime(14901): at android.os.Handler.dispatchMessage(Handler.java:102) 

正如你可能已經猜到,validateOriginalImage()方法中所涉及的行創建一個新的Opener來自ImageJ的對象(用於在後續處理中將圖像作爲ImagePlus對象打開以供後續處理)。

當我將「ij.jar」添加到我的應用程序構建路徑中作爲外部JAR文件時(在Eclipse的「配置構建路徑」對話框的「庫」選項卡上)當我包含整個ImageJ源代碼作爲應用程序構建路徑(位於「項目」選項卡)上的工作區中的獨立Java項目。我使用1.48版本的「ij.jar」文件或1.47v版本的源代碼(從未同時使用,因爲在構建過程中顯然會導致一些衝突)。

爲了解決這個問題,我在應用程序項目本身的「src」目錄中包含了ImageJ源代碼(如上所示爲1.47v),並且當我嘗試選擇時會收到一個不同但同樣致命的異常東西在應用中的過濾對話框:

04-07 15:11:07.530: E/AndroidRuntime(29709): FATAL EXCEPTION: main 
04-07 15:11:07.530: E/AndroidRuntime(29709): Process: edu.wpi.khufnagle.lighthousenavigator, PID: 29709 
04-07 15:11:07.530: E/AndroidRuntime(29709): java.lang.ExceptionInInitializerError 
04-07 15:11:07.530: E/AndroidRuntime(29709): at ij.Menus.<clinit>(Menus.java:80) 
04-07 15:11:07.530: E/AndroidRuntime(29709): at ij.io.Opener.<clinit>(Opener.java:51) 
04-07 15:11:07.530: E/AndroidRuntime(29709): at edu.wpi.khufnagle.lighthousenavigator.filter.ImageManipulator.validateOriginalImage(ImageManipulator.java:38) 
. 
. 
. 
04-07 15:11:07.530: E/AndroidRuntime(29709): Caused by: java.lang.StringIndexOutOfBoundsException: length=1; regionStart=0; regionLength=3 
04-07 15:11:07.530: E/AndroidRuntime(29709): at java.lang.String.startEndAndLength(String.java:588) 
04-07 15:11:07.530: E/AndroidRuntime(29709): at java.lang.String.substring(String.java:1475) 
04-07 15:11:07.530: E/AndroidRuntime(29709): at ij.IJ.<clinit>(IJ.java:65) 
04-07 15:11:07.530: E/AndroidRuntime(29709): ... 15 more 

StringIndexOutOfBoundsException是在檢查我運行的Java版本的IJ.java發生在一行代碼。顯然,ImageJ認爲這個版本字符串是空白的,並且當它試圖獲取這個(看似)空字符串的子字符串時,代碼會拋出一個異常。

是否有任何ImageJ/Eclipse大師可以幫助將ImageJ成功集成到我的應用程序中?

+2

我希望它需要對ImageJ進行大量的代碼更改以支持包含在Android應用程序中。雖然我們正在開發[ImageJ 2.0.0](http://developer.imagej.net),但爲了實現這一目的,我們對問題進行了嚴格的分離,但最終它仍然可能不是交鑰匙:只有很多Java API在Android中不可用(例如AWT)。 ImageJ 1.x從根本上依賴於AWT的功能。 – ctrueden

+0

我明白......這對於未來的項目來說是相當不幸的,但很值得了解。謝謝! – user3507655

回答

相關問題