gpt4 book ai didi

java - 无法将 ImageJ 集成到 Android 应用程序中

转载 作者:行者123 更新时间:2023-11-30 11:20:04 24 4
gpt4 key购买 nike

我正在创建一个可以过滤照片的 Android 应用程序。为了执行这些过滤器所需的图像处理,我使用了 ImageJ 的 API。用户在对话框中选择要应用于照片集的滤镜。然而,在按下“确定”后,应用程序崩溃,LogCat 中出现以下输出(我使用的是 Eclipse):

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() 方法中的相关行从 ImageJ 创建了一个新的 Opener 对象(用于将图像打开为 下一行的 ImagePlus 对象供以后处理)。

当我将“ij.jar”作为外部 JAR 文件添加到我的应用程序的构建路径时(在 Eclipse 的“配置构建路径”对话框的“库”选项卡上)时会发生此异常我将整个 ImageJ 源代码作为一个单独的 Java 项目包含在我的应用程序构建路径(在“项目”选项卡上)的工作区中。我使用的是“ij.jar”文件的 1.48 版或源代码的 1.47v 版(不能同时使用,因为这显然会在构建过程中引起一些冲突)。

为了解决这个问题,我将 ImageJ 源代码(如上所示的 1.47v)包含在应用程序项目本身的“src”目录中,当我尝试选择某些内容时,我收到了一个不同但同样致命的异常在应用程序的过滤对话框中:

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 发生在 IJ.java 中检查我正在运行的 Java 版本的代码行中。显然,ImageJ 认为这个版本字符串是空白的,当它试图获取这个(看似)空白字符串的子字符串时,代码会抛出异常。

是否有任何 ImageJ/Eclipse 专家可以帮助将 ImageJ 成功集成到我的应用程序中?

最佳答案

请注意,在 java 中,您会得到这样的 java 版本:

System.getProperty(“java.version”)

http://deviltechie.wordpress.com/2011/03/16/get-the-version-of-java-runtime/

但在 Android 中有点不同:

PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
version = pInfo.versionName;

Get application version programmatically in android

这将解释 NoClassDefFoundError

关于java - 无法将 ImageJ 集成到 Android 应用程序中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921226/

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