2013-12-26 4 views
1

Я следовал this tutorial, чтобы позвонить Clojure из Java в Eclipse с помощью Leiningen. Я хочу закодировать AI моей игры в Clojure и сделать все остальное в LibGDX для ОС Android.NoClassDefFoundError, вызывающий Clojure с Java (Android, LibGDX)

После того, как я закончил сторону Clojure, я использую LEIN команду, чтобы упаковать его в файл JAR (#lein компилировать, #lein бежать, #lein uberjar).

Я добавляю файл jar с помощью правой кнопкой мыши по проекту> Свойства> Путь сборки Java> Библиотеки> Добавить внешние JAR ...> myai-0.1.0-SNAPSHOT-standalone.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))) 
) 

Спасибо s заранее! :)

EDIT: Он не работает ни в Ubuntu с командами командной строки.

ответ

1

Какая глупая ошибка ... Я забыл проверить Clojure .jar файл в Свойства>Java Построить Путь>Order и вкладку Экспорт, поэтому он не был добавлен к классам во время компиляции ,