加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

从scala调用java时的java.lang.IllegalAccessError – solutions

发布时间:2020-12-16 08:47:12 所属栏目:安全 来源:网络整理
导读:我正在使用 java线性代数库(ojalgo 32.0)进行scala项目,我遇到了一个 奇怪的问题.我使用的每种ojalgo方法都很好(例如矩阵 和逐元素乘法,逆矩阵和随机矩阵 除了用于获得矩阵尺寸的两个看似简单的一代之外.我从来没有过 之前调用java库的麻烦,我很好奇 这是怎
我正在使用 java线性代数库(ojalgo 32.0)进行scala项目,我遇到了一个
奇怪的问题.我使用的每种ojalgo方法都很好(例如矩阵
和逐元素乘法,逆矩阵和随机矩阵
除了用于获得矩阵尺寸的两个看似简单的一代之外.我从来没有过
之前调用java库的麻烦,我很好奇
这是怎么回事.这是java中的一些示例代码,可以正常工作:

public static void main(String[] arg) {
  MatrixFactory tmpFactory = PrimitiveMatrix.FACTORY;
  BasicMatrix wMat = tmpFactory.makeRandom(5,5,new Weibull(5.0,2.0));
  System.out.println(wMat.getColDim());
}

对scala的简单翻译(使用版本2.9.2):

object DataGen {
  def main(args:Array[String]):Unit = {
  val tmpFactory = PrimitiveMatrix.FACTORY
  val wMat = tmpFactory.makeRandom(5,2.0))
  println(wMat.getColDim)
}

scala代码抛出这个:

Exception in thread "main" java.lang.IllegalAccessError: tried to
access class org.ojalgo.access.Structure2D from class DataGen$
   at DataGen$.main(DataGen.scala:11)
   at DataGen.main(DataGen.scala)

第11行是

println(wMat.getColDim).

搜索此错误的其他情况表明scala中存在访问错误的一些已知问题,但我仍然不确定问题的原因或最干净的解决方法.

解决方法

我并不完全理解为什么它不起作用,但我玩了一下它并发现,BasicMatrix不可访问,因为我试图明确地将Matrix转换为它,因为这是实现getColDim的地方.然而,当我将Matrix转换为PrimitiveMatrix时,它有效:

scala> res1.asInstanceOf[PrimitiveMatrix].getColDim
res9: Int = 5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读