因为使用Java版本的OpenCV,真的是见识过了一下java不同版本之间的问题。这里是对这个JavaFX问题的解释,也是记录一下版本之间问题的缘由。
刚开始用Mac port终于装好了opencv +java,以为完事了。结果mac port的这段命令帮我装的直接是opencv 3.4.8的jar包。
$ sudo port install opencv +java
而且opencv这个东西,在github上的开源有好多种版本都在同时维护更新,是一种并行的更新方式。猜测这个master就是主要的版本,现在是4.0几好像。2.4和3.4也一只都有在同步的更新。
guthub上的分支.png
反正罪恶的问题就开始了,3.4.8的opencv在java里面倒入了jar的library之后,构建工程的时候就会出现问题,类文件具有错误的版本56.0,应为52.0
什么的。后来查一下也猜出来是java版本的问题。后来就又装了一个JDK13(现在都已经更新的这么快了嘛),然后在IDEA里面修改了SDK的路径,但还是不行。后来专门查了一下这个56.0
,然后有一个文章说的是major版本号的东西,就是大概用反编译已有的class来看他所使用的major version,然后不同的major version对应这个不同的JDK版本,这样就知道自己引入的jar包是不是有问题(其实一般来说这种问都是引入的jar包比现在所用的编译器版本高了,因为java是向下兼容的),然后我发现了opencv3.4.8的jar包对应的是56,56的major version是对应的JDK12的版本,所以我的JDK13应该没有问题呀。
$ javap -verbose MyClass | grep "major"
然后这里放一下人家的参考文章:https://blog.csdn.net/SweetTool/article/details/77203193
然后问题就到了 “我已经有更高版本的JDK,怎么还不能编译通过”。然后又查了半天,和在IDEA里面所使用的编译版本有关。它意思就是你引入了正确的JDK,但是工程文件用的编译还是以前那个,这个就很奇怪了,我已经在Project Structure里面修改了所有可以影响到编译的地方,连Language Level
都改成了比较高的值。真的难受了~
然后就重启了一下IDEA,然后它就好了,不知道是不是IDEA自己对于我新下载的SDK没有index到还是必须要这么重启一下,这个作为遗留的第一个问题。
然后就开始跟着官方的教程走起,他用了了JavaFX来作为前端的模块工具,所以我也还是去弄了一下JavaFX(虽然大家好像都很嫌弃它)。然后就出现了这个问题The Javafx runtime is not configured...
这个问题好解决,很容易就查到了还是版本的问题,官方说java10之前的都是标准库里面就自带了JavaFX,而我现在用的13,呵呵,又得自己下一个,然后你就会发现不小心下错了openjfx-11
的版本,就又出现了那种版本不对称的报错。你就知道又得再下载一个了。先祈祷一下这个配完就可以开始正式的学习OpenCV的java环境版本了,不许再出现什么幺蛾子了~
对了,JavaFX还需要配合SceneBuilder工具来使用,然后这个SceneBuilder是用java实现的,所以,还是下载最新的2.0的版本吧。
到这里特别想知道这个工具这么复杂这么就没有官方自己把它调整好,或者说在提供下载的地方提醒一下说:“这个是对应于JDK12版本的什么什么的~”。或者它有说,我真的没有看到,望告知!
最后还遗留的问题二有关于Java本身的编译、什么JAVA_HOME、classpath的,还有library和artifact,bin和module这些怎么来理解。虽然大致懂一些,还是想之后写一篇问题自己理解清楚一点。
网友评论