我按照本教程使用Leiningen从Eclipse中的Java调用Clojure。我想在Clojure中编写游戏的AI,其余的则在Android操作系统的LibGDX中编写。
完成Clojure端后,我使用lein命令将其打包到jar文件中(#lein编译,#lein运行,#lein uberjar)。
我通过右键单击project添加jar文件
我的问题发生在我执行游戏时。
import myai.*;
public class Stack extends Actor {
...
public void draw(SpriteBatch batch, float parentAlpha) {
System.out.println("Binomial = " + core.binomial(5, 15));
}
...
}
我收到这个错误:
12-26 00:27:01.570: I/dalvikvm(8384): Could not find method myai.core.binomial, referenced from method my.package.Stack.draw
12-26 00:27:01.570: E/AndroidRuntime(2281): FATAL EXCEPTION: GLThread
12-26 00:27:01.570: E/AndroidRuntime(2281): java.lang.NoClassDefFoundError: myai.core
12-26 00:27:01.570: E/AndroidRuntime(2281): at my.package.Stack.draw(Stack.java:297)
12-26 00:27:01.570: E/AndroidRuntime(2281): at my.package.GameScreen.render(GameScreen.java:146)
12-26 00:27:01.570: E/AndroidRuntime(2281): at com.badlogic.gdx.Game.render(Game.java:46)
12-26 00:27:01.570: E/AndroidRuntime(2281): at my.package.MyGame.render(MyGame.java:23)
12-26 00:27:01.570: E/AndroidRuntime(2281): at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:487)
12-26 00:27:01.570: E/AndroidRuntime(2281): at com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake$GLThread.guardedRun(GLSurfaceViewCupcake.java:713)
12-26 00:27:01.570: E/AndroidRuntime(2281): at com.badlogic.gdx.backends.android.surfaceview.GLSurfaceViewCupcake$GLThread.run(GLSurfaceViewCupcake.java:646)
我真的不知道为什么会这样,因为我已经遵循了教程中的所有步骤。
这些是我的clojure文件:
project.clj
(defproject myai "0.1.0-SNAPSHOT"
:description "AI for my game"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.5.1"]]
:aot [myai.core]
:main myai.core)
core.clj
(ns myai.core
(:gen-class
:name myai.core
:methods [#^{:static true} [binomial [int int] double]])
)
(defn binomial
"Calculate the binomial coefficient."
[n k]
(let [a (inc n)]
(loop [b 1
c 1]
(if (> b k)
c
(recur (inc b) (* (/ (- a b) b) c))))))
(defn -binomial
"A Java-callable wrapper around the 'binomial' function."
[n k]
(binomial n k))
(defn -main
[& args]
(println "My Game Artificial Intelligence")
(println (str "(binomial 5 3): " (binomial 5 3)))
)
提前感谢!:)
编辑:它在Ubuntu中也不能使用命令行命令。
多么愚蠢的错误。。。我忘了检查Clojure。属性中的jar文件
从Clojoure调用Java非常简单明了,但反过来已被证明是不可预测的。 它们似乎有两种方式: 1)以下类别 2) 将clojure编译成uberjar,然后将其导入java代码。 我选择了第二个选项,因为它更直接。 这是clojure代码 这是Java代码。 当我做出“service.returned(4);”时,系统永远不会返回。我不太明白为什么对我来说,它会像函数没有从Clojure返回一
问题内容: 对于“从Java调用Clojure”而言,大多数Google热门歌曲都已过时,建议您使用它clojure.lang.RT来编译源代码。假设您已经从Clojure项目构建了一个jar并将其包含在类路径中,那么您能否帮助您清楚地说明如何从Java调用Clojure? 问题答案: 从Clojure 1.6.0开始,有一种新的首选方式来加载和调用Clojure函数。现在,此方法优于直接调用RT
问题内容: 我有Clojure功能。 源代码: https://github.com/8protons/url62/blob/master/src/url62/core.clj 我需要从Java执行此功能。 我尝试使用这样的代码: 但这不起作用: 问题答案: 您忘记了Clojure命名空间: 这是项目结构: 和文件: 这是调用嵌入式Clojure函数的Java类: Clojure文件: Cloju
我想用Java将一个文件放入Windows中的回收站。以便用户能够还原它。
在Java里面调用 Clojure 提前编译的Clojure函数如果是静态的函数的话,那么它们可以被java程序调用。可以通过把函数的元数据项: :static 设置为 true 来达到这个目的。语法是这样的: (ns <em>namespace</em> (:gen-class :methods [#^{:static true} [<em>function-name</em> [<e
我正在尝试构建一个使用javamail和gmail的smtp服务发送电子邮件的应用程序,但是当我运行它时,当我调用Session.getInstance时,它会崩溃。调试后,它似乎是关于com.sun.mail.util.MailLogger的NoClassDefFoundError。我在其他地方读到,为了获得它,我必须添加一个较旧的邮件包,但我仍然遇到错误。 以下是我在Android Studi