現在、SWT スタンドアロン アプリケーションで作業しています。普段はWindowsで作業していますが、Ubuntuで作業したいので、以下の環境を構築しました。
Ubuntu 11.04 64 ビット Java 6 update 27 64 ビット Eclipse Java EE 3.5 Galileo 64 ビット SWT GTK 64 ビットを使用しています
さまざまな SWT ウィジェットを拡張するいくつかのクラスがあります。
例えば
public class MyCombo extends Combo implements CellEditor<Long> {
private Set<ListenerRef> listeners = new HashSet<ListenerRef>();
@Override
public void addListener(int eventType, Listener listener) {
listeners.add(new MyCombo.ListenerRef(eventType, listener));
super.addListener(eventType, listener);
}
@Override
protected void checkSubclass() {
// Do nothing
}
.
.
.
このコードは、SWT32 ビットと java32 ビットを実行している Windows 7 64 ビットで、Eclipse 32 ビットから完全に機能します。
Ubuntu 11.04では、リスナーを追加しようとするとNPE(NullPointerException)が発生します。リスナーセットがnullのようですが、上記のコードのようにセットを初期化する必要はありません。ウィンドウズ7
最初に、Ubuntu64 ビットで SWT 32 ビット アプリを実行する際に問題が発生しました。これは、64 ubuntu で 32 個のアプリを実行するとバグがあるように思われるため、64 バージョンで実行しようとしたところ、このエラーが発生しました。この NPE がセットをチェックしないようにすると、
java.lang.NullPointerException
at org.eclipse.swt.accessibility.Accessible.isValidThread(Unknown Source)
at org.eclipse.swt.accessibility.Accessible.checkWidget(Unknown Source)
at org.eclipse.swt.accessibility.Accessible.addRelation(Unknown Source)
何が原因でしょうか?以前の Ubuntu ディストリビューションでこの問題を認識していますか? 少なくとも SWT 32 ビットを実行している Windows 7 では、この問題は発生しません。
詳細が必要な場合はお知らせください
感謝と敬意
ところで、忘れていましたが、SWT は Linux では 3.7、Windows では 3.6.2 です。