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

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

ただいまの
回答率

88.57%

eclipseでJNAを使用するとエラーになる

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 5,385

benzo

score 34

前提・実現したいこと

eclipseプラグインの中でJNAを使用し、DLLと通信をしたいと考えています。

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

実行すると下記のようなエラーが出てうまくいきません。

!SESSION 2016-01-26 18:19:15.975 -----------------------------------------------
eclipse.buildId=4.5.1.M20150904-0015
java.version=1.8.0_71
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ja_JP
Framework arguments:  -product org.eclipse.platform.ide
Command-line arguments:  -product org.eclipse.platform.ide -data C:\Users\taro\workspace/../runtime-EclipseApplication -dev file:C:/Users/taro/workspace/.metadata/.plugins/org.eclipse.pde.core/Eclipse Application/dev.properties -os win32 -ws win32 -arch x86_64 -consoleLog

!ENTRY org.eclipse.osgi 4 0 2016-01-26 18:19:19.817
!MESSAGE An error occurred while automatically activating bundle test8 (446).
!STACK 0
org.osgi.framework.BundleException: Exception in test8.Activator.start() of bundle test8.
    at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:792)
    at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:721)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:941)
    at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:318)
    at org.eclipse.osgi.container.Module.doStart(Module.java:571)
    at org.eclipse.osgi.container.Module.start(Module.java:439)
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:454)
    at org.eclipse.osgi.internal.hooks.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
    at org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:531)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:324)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:327)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:402)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:352)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:344)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.loadClass(EquinoxBundle.java:573)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
    at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
    at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
    at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
    at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:293)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:288)
    at org.eclipse.ui.internal.registry.EditorDescriptor.createEditor(EditorDescriptor.java:235)
    at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:328)
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPart(CompatibilityPart.java:279)
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPart(CompatibilityEditor.java:63)
    at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:317)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:898)
    at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:879)
    at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:121)
    at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:345)
    at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:264)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:104)
    at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionC

ソースコード

package test8;

import com.sun.jna.Library;

public class HelloWorld {
    public interface DebuggerLib extends Library {
        DebuggerLib INSTANCE=null;
    }

    public static void start() {
        DebuggerLib h=DebuggerLib.INSTANCE;
    }
}
package test8;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

import com.sun.jna.Library;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends AbstractUIPlugin {

    // The plug-in ID
    public static final String PLUGIN_ID = "test8"; //$NON-NLS-1$

    // The shared instance
    private static Activator plugin;

    //private static DebuggerLib h=DebuggerLib.INSTANCE;

    /**
     * The constructor
     */
    public Activator() {
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
     */
    public void start(BundleContext context) throws Exception {
        super.start(context);
        plugin = this;
        HelloWorld h = new HelloWorld();
        h.start();
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
     */
    public void stop(BundleContext context) throws Exception {
        plugin = null;
        super.stop(context);
    }

    /**
     * Returns the shared instance
     *
     * @return the shared instance
     */
    public static Activator getDefault() {
        return plugin;
    }

    /**
     * Returns an image descriptor for the image file at the given
     * plug-in relative path
     *
     * @param path the path
     * @return the image descriptor
     */
    public static ImageDescriptor getImageDescriptor(String path) {
        return imageDescriptorFromPlugin(PLUGIN_ID, path);
    }
}

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

jarは下記ページのDownloadの項から落としてきました。
GitHub Java Native Access (JNA)

ライブラリの追加はまんまこの通りに行っています。
Eclipse プロジェクトのビルド・パスへライブラリーを追加するには?

プラグイン開発、java開発初心者なため思わぬ勘違いをしているのかもしれません。
詳しい方、解決方法を教えてください。よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • eripong

    2016/01/27 08:24

    ログの時刻からすると、質問本文にあるエラーメッセージは、エラーログがローテートされて消えた感じですね。もう一度エラーを起こしてから、ログを挙げないと分からなそうです。

    キャンセル

  • benzo

    2016/01/27 08:50

    本文に書いたエラー文とコメントに書いたエラー文が違うのは、違う環境(違うPC)で再現させたからです。呼び出したいdllはあるんですが、null入れてインスタンス作った時点でエラー出てますから、dll呼び出しには原因は無いのかなと。だとすると単純に書きかた間違えてるとか、パス通してないとかなのかなと思いつつ、何やっても上手くいかない。元々のエラー文はあとで同じ環境で再現させて再度貼りますね。

    キャンセル

  • benzo

    2016/01/27 08:59

    あーもしかして、loadlibraryやってエラーが出つつ、loadlibraryやらなかったらやらなかったで別のエラーが出てるという事?

    キャンセル

回答 1

checkベストアンサー

0

この辺気になる。NoClassDefFoundErrorとかならこれかな
Eclipse Plugin 開発で外部 jar を利用する

LoadLibraryまわりだったらこのへんがあやしい
JNI call from Eclipse plugin

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/01/27 15:39 編集

    あ、再質問ですか。こちらでも内容確認しようと思っていたのですが。

    matobaaさんの言っていることは、語調は荒いですが間違っていないと思いますよ。
    そもそも、質問に対して環境を作って試しているわけですから、
    benzoさんの問題解決に対して、協力姿勢にあったことは間違いないと思います。

    「自分でやってわからない、検索してもわからない」からこそ、受けたアドバイス通りに
    しないと、解決に向かわないのではないでしょうか?
    少なくとも、「Eclipse Plugin 開発で外部 jar を利用する」にある様なjarの指定は、
    こちらで試しても必要でしたが、これはすでに対応済みですか?

    何にしても、エラーメッセージ全てが必要なのはその通りなので、
    次に質問を立てるのであれば、その点は気を付けたほうが良いと思います。

    キャンセル

  • 2016/01/27 16:18

    そうかそうか!ごめんなさい。
    改めて最初に質問した時の環境でエラーログを確認したらNoClassDefFoundErrorが出ていました。
    そして、eripongさんのご指摘通りでもありますが、「Eclipse Plugin 開発で外部 jar を利用する」の通りにやったところ解決しました。
    ただ、もう一個の環境でうまくいかない理由が説明つかないんですが、こちらはもうちょっといろいろいじってみつつ、わからなかったら改めて質問し直すことにします。
    2つの環境でうまくいかないから共通項探せば答えに近づけるかなと思ったのが間違いでした。

    キャンセル

  • 2016/01/27 22:05

    おー解決したんだ。ビンゴ! よかったよかった。

    二つ目のはもうちょっと厄介っぽい予感がしてます。そちらも期待してます。

    キャンセル

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

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

関連した質問

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