首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓系统中的JAudiotagger java.lang.VerifyError

安卓系统中的JAudiotagger java.lang.VerifyError
EN

Stack Overflow用户
提问于 2015-12-07 11:39:08
回答 1查看 450关注 0票数 1

我正在尝试创建一个音频标记编辑器,引用这些

http://www.jthink.net/jaudiotagger/

JAudioTagger和Android -更改mp3中的值?

ID3标签用于android -可以设置艺术品,但不能设置其他字段。

需要将哪个库导入到项目中,这样我就不能获得java.lang.VerifyError

我正在用这个库尝试这个代码

jaudiotagger-2.2.5.jar

我在这里找到的

https://bitbucket.org/ijabz/jaudiotagger/downloads

这是密码

代码语言:javascript
复制
try {
    File file = new File(Data);
    TagOptionSingleton.getInstance().setAndroid(true);
    AudioFile audioFile = AudioFileIO.read(file);
    Tag newTag = audioFile.getTag();
    newTag.setField(FieldKey.ALBUM,"October");
    newTag.setField(FieldKey.ARTIST,"U2");
    audioFile.commit(); 
} catch (CannotReadException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (TagException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (ReadOnlyFileException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (InvalidAudioFrameException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (CannotWriteException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

这是一只原木猫

代码语言:javascript
复制
12-07 16:56:10.618: D/dalvikvm(738): GC_FOR_ALLOC freed 137K, 11% free 6210K/6919K, paused 59ms
12-07 16:56:11.358: I/dalvikvm(738): Could not find method org.jaudiotagger.tag.TagOptionSingleton.getInstance, referenced from method com.example.scrlltabs3.songManagerDialog$3.onClick
12-07 16:56:11.358: W/dalvikvm(738): VFY: unable to resolve static method 11628: Lorg/jaudiotagger/tag/TagOptionSingleton;.getInstance ()Lorg/jaudiotagger/tag/TagOptionSingleton;
12-07 16:56:11.368: D/dalvikvm(738): VFY: replacing opcode 0x71 at 0x0009
12-07 16:56:11.368: W/dalvikvm(738): VFY: unable to resolve exception class 1667 (Lorg/jaudiotagger/audio/exceptions/CannotReadException;)
12-07 16:56:11.378: W/dalvikvm(738): VFY: unable to find exception handler at addr 0x2b
12-07 16:56:11.378: W/dalvikvm(738): VFY:  rejected Lcom/example/scrlltabs3/songManagerDialog$3;.onClick (Landroid/view/View;)V
12-07 16:56:11.378: W/dalvikvm(738): VFY:  rejecting opcode 0x0d at 0x002b
12-07 16:56:11.388: W/dalvikvm(738): VFY:  rejected Lcom/example/scrlltabs3/songManagerDialog$3;.onClick (Landroid/view/View;)V
12-07 16:56:11.388: W/dalvikvm(738): Verifier rejected class Lcom/example/scrlltabs3/songManagerDialog$3;
12-07 16:56:11.388: D/AndroidRuntime(738): Shutting down VM
12-07 16:56:11.398: W/dalvikvm(738): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
12-07 16:56:11.428: E/AndroidRuntime(738): FATAL EXCEPTION: main
12-07 16:56:11.428: E/AndroidRuntime(738): java.lang.VerifyError: com/example/scrlltabs3/songManagerDialog$3
12-07 16:56:11.428: E/AndroidRuntime(738):  at com.example.scrlltabs3.songManagerDialog.onCreate(songManagerDialog.java:68)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.app.Activity.performCreate(Activity.java:4465)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.app.ActivityThread.access$600(ActivityThread.java:122)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.os.Looper.loop(Looper.java:137)
12-07 16:56:11.428: E/AndroidRuntime(738):  at android.app.ActivityThread.main(ActivityThread.java:4340)
12-07 16:56:11.428: E/AndroidRuntime(738):  at java.lang.reflect.Method.invokeNative(Native Method)
12-07 16:56:11.428: E/AndroidRuntime(738):  at java.lang.reflect.Method.invoke(Method.java:511)
12-07 16:56:11.428: E/AndroidRuntime(738):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-07 16:56:11.428: E/AndroidRuntime(738):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-07 16:56:11.428: E/AndroidRuntime(738):  at dalvik.system.NativeStart.main(Native Method)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-07 13:06:01

读取错误时,很容易指出以下一行是导致Verify错误的原因

代码语言:javascript
复制
TagOptionSingleton.getInstance().setAndroid(true);

无法从方法org.jaudiotagger.tag.TagOptionSingleton.getInstance,中找到引用的方法com.example.scrlltabs3.songManagerDialog$3.onClick

在搜索这个问题时,我遇到了下面的堆栈溢出问题/答案,它描述了同一个问题,并通过替换提供了一个解决方案:

代码语言:javascript
复制
audioFile.commit(); 

使用

代码语言:javascript
复制
AudioFileIO.write(audioFile)

请参见这里问题和上面的解决方案。如果这解决了你的问题,那么别忘了给答案者保罗泰勒在那个答案上投一票。

当JVM的字节码验证器试图在执行前验证所有字节码时,java.lang.verifyError就会发生,当它发现不一致时会失败,这些不一致可能会因为许多因素而上升,例如

  • 针对一个库进行编译,并在运行时使用另一个库
  • 具有其他类的类的单独编译依赖于它。
  • 教程链接中列出的其他

有关VerifyError的详细说明和示例可以找到这里

参见上面链接中的示例,其中演示了JVM如何抛出验证错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34132683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档