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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Eclipse Plugin

Eclipseは、IBMによって開発された統合開発環境 (IDE) の一つです。高機能ながらオープンソースであり、Javaをはじめとするいくつかの言語に対応しています。Eclipse-Pluginを使う事でIDEの拡張を行う事が可能です。

JNI

JNI(Java Native Interface)は、Javaプラットフォームにおいて、Javaで記述されたプログラムと、他の言語で書かれたネイティブコードを連携するためのインタフェース仕様である

Java

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

Eclipse

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

Q&A

解決済

1回答

9938閲覧

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

benzo

総合スコア35

Eclipse Plugin

Eclipseは、IBMによって開発された統合開発環境 (IDE) の一つです。高機能ながらオープンソースであり、Javaをはじめとするいくつかの言語に対応しています。Eclipse-Pluginを使う事でIDEの拡張を行う事が可能です。

JNI

JNI(Java Native Interface)は、Javaプラットフォームにおいて、Javaで記述されたプログラムと、他の言語で書かれたネイティブコードを連携するためのインタフェース仕様である

Java

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

Eclipse

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

0グッド

0クリップ

投稿2016/01/26 09:55

###前提・実現したいこと
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

###ソースコード

java

1package test8; 2 3import com.sun.jna.Library; 4 5public class HelloWorld { 6 public interface DebuggerLib extends Library { 7 DebuggerLib INSTANCE=null; 8 } 9 10 public static void start() { 11 DebuggerLib h=DebuggerLib.INSTANCE; 12 } 13}

java

1package test8; 2 3import org.eclipse.jface.resource.ImageDescriptor; 4import org.eclipse.ui.plugin.AbstractUIPlugin; 5import org.osgi.framework.BundleContext; 6 7import com.sun.jna.Library; 8 9/** 10 * The activator class controls the plug-in life cycle 11 */ 12public class Activator extends AbstractUIPlugin { 13 14 // The plug-in ID 15 public static final String PLUGIN_ID = "test8"; //$NON-NLS-1$ 16 17 // The shared instance 18 private static Activator plugin; 19 20 //private static DebuggerLib h=DebuggerLib.INSTANCE; 21 22 /** 23 * The constructor 24 */ 25 public Activator() { 26 } 27 28 /* 29 * (non-Javadoc) 30 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) 31 */ 32 public void start(BundleContext context) throws Exception { 33 super.start(context); 34 plugin = this; 35 HelloWorld h = new HelloWorld(); 36 h.start(); 37 } 38 39 /* 40 * (non-Javadoc) 41 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) 42 */ 43 public void stop(BundleContext context) throws Exception { 44 plugin = null; 45 super.stop(context); 46 } 47 48 /** 49 * Returns the shared instance 50 * 51 * @return the shared instance 52 */ 53 public static Activator getDefault() { 54 return plugin; 55 } 56 57 /** 58 * Returns an image descriptor for the image file at the given 59 * plug-in relative path 60 * 61 * @param path the path 62 * @return the image descriptor 63 */ 64 public static ImageDescriptor getImageDescriptor(String path) { 65 return imageDescriptorFromPlugin(PLUGIN_ID, path); 66 } 67}

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matobaa

2016/01/26 12:44

エラーメッセージってこれで全部です? 手元でやってみたら、 ```Caused by: java.lang.NoClassDefFoundError: com/sun/jna/Library``` とかいろいろ出たのですが。 そんなしょぼいミスではない?
benzo

2016/01/26 15:16 編集

1000文字の制限があったので後ろカットしてます そしてNoClassDefFoundErrorは出ていません。
matobaa

2016/01/26 14:04

あああ、そこが大事なのです。スタックトレース(atナントカのかたまり)の冒頭数行ずつでよいので見たいです。そこに答えがあります。
matobaa

2016/01/26 22:54 編集

``` org.osgi.framework.BundleException: Exception in test8.Activator.start() of bundle test8. at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:792) ``` が含まれてない。 違うエラーじゃね? おちょくってんのか?
eripong

2016/01/26 23:08

呼び出したいdllは何ですか?DebuggerLib.INSTANCEもnullしか入れていないように見えますし、HellowWorld#startでもローカル変数への代入しかしていませんが、どういう動作を期待していますか?
eripong

2016/01/26 23:24

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

2016/01/26 23:50

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

2016/01/26 23:59

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

回答1

0

ベストアンサー

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

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

投稿2016/01/26 12:57

編集2016/01/26 12:58
matobaa

総合スコア2493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

benzo

2016/01/26 15:18

NoClassDefFoundErrorは出ていません。 HelloWorld クラスのstartメソッドが無くても同じ結果になるのでLoadLibrary周りじゃないと思います。 extends Library があやしいのかな?
matobaa

2016/01/26 22:55

まずはエラーメッセージちゃんと読みなさいって
benzo

2016/01/26 23:56

エラーメッセージ読んでわかったら質問してない
matobaa

2016/01/27 01:06

じゃあ勝手にすれば。莫迦だねえ
benzo

2016/01/27 05:29

ここはそういうところでしょう。自分でやってわからない、検索してもわからない、だから質問する。何か根本的な思い違いがあったら検索してもわからないの当然だから、だから人に聞きたいわけです。「きになる」とか「あやしい」とか言ってわかってないのに回答してるあなたにはまさかりを投げたいですね。いっぺんあなたの回答をベストアンサーにして、新しいサンプル作って質問立て直します。
eripong

2016/01/27 06:40 編集

あ、再質問ですか。こちらでも内容確認しようと思っていたのですが。 matobaaさんの言っていることは、語調は荒いですが間違っていないと思いますよ。 そもそも、質問に対して環境を作って試しているわけですから、 benzoさんの問題解決に対して、協力姿勢にあったことは間違いないと思います。 「自分でやってわからない、検索してもわからない」からこそ、受けたアドバイス通りに しないと、解決に向かわないのではないでしょうか? 少なくとも、「Eclipse Plugin 開発で外部 jar を利用する」にある様なjarの指定は、 こちらで試しても必要でしたが、これはすでに対応済みですか? 何にしても、エラーメッセージ全てが必要なのはその通りなので、 次に質問を立てるのであれば、その点は気を付けたほうが良いと思います。
benzo

2016/01/27 07:18

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

2016/01/27 13:05

おー解決したんだ。ビンゴ! よかったよかった。 二つ目のはもうちょっと厄介っぽい予感がしてます。そちらも期待してます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問