質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.32%

  • Java

    14434questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1745questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Linux Mint

    32questions

    Linux Mintは、使いやすいLinuxシステムの提供を目的としたLinuxディストリビューションです。UbuntuとDebianをベースにしており、Ubuntuのリポジトリを共有しています。

Eclipse上でのJBulletのデモが実行できない。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 314

K_Cpamp

score 2

前提・実現したいこと

物理エンジンBulletのJava版、JBulletをEclipse上で使えるようにしたい。
本家のBulletのデモはEclipse上ではないが実行できた。(関係ないかもしれないが…)

発生している問題・エラーメッセージ

1.Eclipseで新規プロジェクトを生成。
2.Jbulletのjarをライブラリに追加を行い、デモがあったので実行。
3.しかしエラーを返してきた。

ここを参考にインストールを行った。
https://www.ntu.edu.sg/home/ehchua/programming/game/BulletPhysics_JBullet.html

Select "Native Library 
はLinuxOSなのでwin32ではなくlinuxを通している.

Using jStackAllocはやれていない。これが原因の可能性あり。
自分のAntの知識,xmlの知識が乏しく申し訳ないです。

Exception in thread "main" java.lang.Error: not instrumented
    at cz.advel.stack.Stack.alloc(Stack.java:110)
    at com.bulletphysics.collision.broadphase.AxisSweep3Internal.<init>(AxisSweep3Internal.java:90)
    at com.bulletphysics.collision.broadphase.AxisSweep3.<init>(AxisSweep3.java:52)
    at com.bulletphysics.collision.broadphase.AxisSweep3.<init>(AxisSweep3.java:48)
    at com.bulletphysics.demos.helloworld.HelloWorld.main(HelloWorld.java:70)

コード(stack.java)

/*
 * JStackAlloc (c) 2008 Martin Dvorak <jezek2@advel.cz>
 *
 * This software is provided 'as-is', without any express or implied warranty.
 * In no event will the authors be held liable for any damages arising from
 * the use of this software.
 * 
 * Permission is granted to anyone to use this software for any purpose, 
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 * 
 * 1. The origin of this software must not be misrepresented; you must not
 *    claim that you wrote the original software. If you use this software
 *    in a product, an acknowledgment in the product documentation would be
 *    appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 *    misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 */

package cz.advel.stack;

import cz.advel.stack.instrument.InstrumentationTask;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Support for stack allocation of "value" objects. The only requirements for "value"
 * objects is that they must have public zero argument constructor and <code>set</code>
 * method with one argument of the same type (or superclass) which copies data from
 * given instance.<p>
 * 
 * <b>Example usage:</b>
 * <pre>
 * public static Vector3f average(Vector3f v1, Vector3f v2, Vector3f out) {
 *     out.add(v1, v2);
 *     out.scale(0.5f);
 *     return out;
 * }
 * 
 * public static void test() {
 *     Vector3f v1 = Stack.alloc(Vector3f.class);
 *     v1.set(0f, 1f, 2f);
 * 
 *     Vector3f v2 = Stack.alloc(v1);
 *     v2.x = 10f;
 * 
 *     Vector3f avg = average(v1, v2, Stack.alloc(Vector3f.class));
 * }
 * </pre>
 * which is transformed into something like the following code. The actual
 * generated code has mangled names for unique type identification and can have
 * other minor differences.
 * <pre>
 * public static void test() {
 *     $Stack stack = $Stack.get();
 *     stack.pushVector3f();
 *     try {
 *         Vector3f v1 = stack.getVector3f();
 *         v1.set(0f, 1f, 2f);
 * 
 *         Vector3f v2 = stack.getVector3f(v1);
 *         v2.x = 10f;
 * 
 *         Vector3f avg = average(v1, v2, stack.getVector3f());
 *     }
 *     finally {
 *         stack.popVector3f();
 *     }
 * }
 * </pre>
 * 
 * <b>Rules:</b>
 * <ul>
 * <li>classes needs to be instrumented by provided InstrumentationTask for ANT, otherwise
 *     error is throwed in runtime</li>
 * <li>stack is pushed only once per method, do not use stack allocation in loops</li>
 * <li>returning of stack allocated objects is not supported, use output parameter instead (like in the
 *     example)</li>
 * <li>working with stack is thread-safe, the data are separate for each thread</li>
 * <li>combining different libraries works fine, each must have their stack stored
 *     in different package, so you'll just end up with multiple stacks in final application,
 *     which is fine, because the values are used between them without problem
 * <li>when creating and destroying threads you must be aware that the implementation
 *     uses ThreadLocal to persist stack instances between method calls, it's advisable
 *     to call <code>cleanCurrentThread</code> method on thread just before destroying
 * </li>
 * </ul>
 * 
 * @author jezek2
 */
public class Stack {

    private static List<WeakReference<ThreadLocal>> threadLocalList = new ArrayList<WeakReference<ThreadLocal>>();

    private Stack() {
    }

    /**
     * Returns stack allocated object.<p>
     * 
     * Requires instrumentation of your classes in order to work.
     * 
     * @param cls class type, must be compile-time constant
     * @return stack allocated instance of given class
     */
    public static <T> T alloc(Class<T> cls) {
        throw new Error("not instrumented");
    }

    /**
     * Returns stack allocated object with copied value from given parameter.<p>
     * 
     * Requires instrumentation of your classes in order to work.
     * 
     * @param obj object to copy on stack, the type must be statically known
     * @return stack allocated instance with copied data
     */
    public static <T> T alloc(T obj) {
        throw new Error("not instrumented");
    }

    /**
     * Used internally.
     */
    public static synchronized void internalRegisterThreadLocal(ThreadLocal local) {
        threadLocalList.add(new WeakReference<ThreadLocal>(local));
    }

    /**
     * Removes all cached stack instances for current thread.
     */
    public static synchronized void cleanCurrentThread() {
        for (Iterator<WeakReference<ThreadLocal>> it = threadLocalList.iterator(); it.hasNext(); ) {
            WeakReference<ThreadLocal> ref = it.next();
            ThreadLocal local = ref.get();
            if (local != null) {
                local.remove();
            }
            else {
                it.remove();
            }
        }
    }

    /**
     * Removes all cached stack instances for current thread in current library.<p>
     * 
     * Requires instrumentation of your classes in order to work.
     * 
     * @see InstrumentationTask#setIsolated(boolean)
     */
    public static void libraryCleanCurrentThread() {
        throw new Error("not instrumented");
    }

}

試した解決方法

1.上記のように

ここを参考にインストールを行った。 https://www.ntu.edu.sg/home/ehchua/programming/game/BulletPhysics_JBullet.html

Using jStackAllocはやれていない。これが原因の可能性あり。 自分のAntの知識,xmlの知識が乏しく申し訳ありません。

2.自分と全く同じ状況に陥った方のブログあったのでそこを参考にした。

https://ameblo.jp/guojia/theme-10051299279.html

如何せん、lwjglの画面表示されずコンソールにこれ表示された。

world pos = 2.000000,9.991667,0.000000
world pos = 0.000000,-56.000000,0.000000
world pos = 2.000000,9.983334,0.000000
world pos = 0.000000,-56.000000,0.000000
world pos = 2.000000,9.972222,0.000000
world pos = 0.000000,-56.000000,0.000000

以下略

今回制作したプロジェクト

jbullet-Dropbox

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報
cat /etc/os-release 
NAME="Linux Mint"
VERSION="18.1 (Serena)"
ID=linuxmint
ID_LIKE=ubuntu

32bit版のMintを使っています。

Eclipse Java EE IDE for Web Developers.

Version: Oxygen.1a Release (4.7.1a)

java -version
openjdk version "1.8.0_131"

jbullet jbullet-20101010.zipから解凍してプロジェクトに投下した。

更新

SSD(外付けHDDとかはない)上にはwindowsとかはのっていません。mintオンリーです。(2018/1/3 21:10)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • asahina1979

    2018/01/03 20:28

    ゲストOSでホストOSにインストールしたものを利用しようとしている?

    キャンセル

  • asahina1979

    2018/01/03 20:29

    ちなみにコードをアップするなら github がおすすめです。

    キャンセル

  • K_Cpamp

    2018/01/03 21:05 編集

    依頼ありがとうございます。SSD(外付けHDDとかはない)上にはwindowsとかはのっていません。mintオンリーです。

    キャンセル

  • K_Cpamp

    2018/01/03 21:07

    githubはアカウント登録したまま放置してます(笑)。頑張って勉強します。

    キャンセル

回答 1

check解決した方法

0

自己解決をしたため報告させていただきます。

解決方法

1.上記の"試した解決方法"の "2" の方法と同じように行う。
2.ant.jar(どこのタイミングでダウンロードしたか忘れました。)をダウンロードしてきてパスを通す。
3.今回は"com/bulletphysics/demos/helloworld/HelloWorld.java"を実行せず、"/com/bulletphysics/demos/vehicle/VehicleDemo.java"を実行した。

結果

実行結果

原因とその考察

今回の失敗の原因は、安直に"HelloWorld.java"をデモに使ったことでした。
"HelloWorld.java"をよく読んで見ると実行結果を表示させる"lwjgl"を使っていないことが判明した。なので他にもデモがあったのでそれを実行することにより上記の通り結果が表示され解決に至った。今回例のブログのコピペだったのでどうしてエラーの解決になったのか理解していないためこの後コードを読み理解していきたいと思います。

最後に

今回始めてのteratailの質問でした。自己解決に至った時に自分の質問を読み直してみると実現してほしいことが書かれていましたが、具体的に何をしてほしいのか書かれておらず、自分から見てですが解答がしづらく若干丸投げ感があるように思えました。もう少し質問内容を吟味してから投稿するよう心がけたいと思います。最後になりましたが今回この質問を解決を試みた方々に感謝申し上げます。ありがとうございました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.32%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    14434questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Eclipse

    1745questions

    Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

  • Linux Mint

    32questions

    Linux Mintは、使いやすいLinuxシステムの提供を目的としたLinuxディストリビューションです。UbuntuとDebianをベースにしており、Ubuntuのリポジトリを共有しています。