Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Windowで作っていたSWTを用いたプログラムがMacで起動できない

ファイル一覧・テキストエディター・ブラウザ表示などを組み合わせ
たプログラムをWindowsで作っていました。
Windowsの調子が悪くなったのとMac気にいってそっちに乗り換え
たのでMacでそのプログラムを実行しようとしています。

ソースコードにあるパスやブラウザ表示用に使っていたSWTをMac
ように変更して実行してみたのですが、画面が出てきません。
EclipseのConsoleを見ると起動しているようですが、Docにはアイ
コンが出てきません。
SWTに関係するコードをコメントアウトしてライブラリをBuild 
Pathから消したところ起動するようにはなりました。

SWTは以下にあるMac用のものをダウンロードして使用したのです
が、2種類あるうちのどちらを使用しても起動しませんでした。

Eclipse Project Downloads
http://download.eclipse.org/eclipse/downloads/drops4/R-4.4.2-
201502041700/#SWT

これはSWTとMacの相性が悪いのでしょうか?

ブラウザ作成のコードは以下のサイトのものを使っています。

Javaの応用:簡易ウェブブラウザの作成 - 亜大用授業資料サイト
http://itasan.mydns.jp/wiki.cgi/asia?
page=Java%A4%CE%B1%FE%CD%D1%A1%A7%B4%CA%B
0%D7%A5%A6%A5%A7%A5%D6%A5%D6%A5%E9%A5%A6
%A5%B6%A4%CE%BA%EE%C0%AE

11

回答

4880

閲覧

11件の回答

評価

0

JavaFXへの移行も検討してみます。

評価

0

こSWT版のサンプルは、SWTがIEコンポーネントを利用しているということなのでMacでは稼働しないんではないでしょうか?

余談ですが
Java初心者の私も面白そうなんでブラウザ側に落ちてきたソースBODY部に干渉できると面白いなぁと思い試したんですが
ブラウザ側のソースBODY部は参照できますが一度パーサーが処理していて原文そのものではないですね
SWTが汎用化しているんでしょうね

BODY部更新もできないですね、色々自動転送になるJavascriptコードを追加したりしてみましたが逆流できないようです

ボタンやテキストボックスに値をセットしようと一般的なI/Fでちょこちょこ書いてみましたがこれもダメ

実際動いているのはIEコンポーネントの中なのでSWTで干渉しているように見えますが更新はできないですね

面白くないです。

評価

0

だからWindowsではIEが表示されたんですね。
てっきりSWTの機能でブラウザ作ってるものと勘違いしてました。
きちんとコード読んで理解できなければJavaFXやってみます。
ありがとうございました。

評価

0

>だからWindowsではIEが表示されたんですね。
たぶん殻のブラウザは関係ないですよ
IEのDLLを直接JNIで呼び出しているのでIEコンポーネントでなくても似たようなAPIがあれば代用できるはずです
それがMac版なのかもしれません
Macは持ってないのでコメントできないです
すいません

評価

0

どこが起動できない原因か探ってみたところ、
swt.jarとswt-debug.jar両方をBuild Pathに追加しているだけで
コードはコメントアウトでも起動しませんでした。
ですが、swt.jarをBuild Pathから削除したら起動しました。
これからコメントアウトのコード少しづつ外して試してみます。
Windows時代は両方追加していて普通に起動したのですが、
そもそも-debugあるなしは何が違うのでしょう?

評価

0

>swt.jarとswt-debug.jar両方をBuild Pathに追加しているだけで


なるほど勉強になります、デバッグモードでないとエラーも通らないから起動しなかったということですかね

でも使う優先度が設定できますよね Jarは、
Windowsの時は、swt-debug.jarが上にいたか、デバッグ不要だったのでわからなかったのでは?
完動後にswt.jarに戻せるんでは?

と思いました

評価

0

実行は
Display display = new Display();
のところでエラーになりました。

//エラーメッセージ
***WARNING: Display must be created on main thread due to 
Cocoa restrictions.
Exception in thread "AWT-EventQueue-0" 
org.eclipse.swt.SWTException: Invalid thread access
    at org.eclipse.swt.SWT.error(SWT.java:4441)
    at org.eclipse.swt.SWT.error(SWT.java:4356)
    at org.eclipse.swt.SWT.error(SWT.java:4327)
    at org.eclipse.swt.widgets.Display.error(Display.java:1094)
    at 
org.eclipse.swt.widgets.Display.createDisplay(Display.java:846)
    at org.eclipse.swt.widgets.Display.create(Display.java:829)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:130)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:720)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:711)
//以下略

どうやらmain threadで実行していないと言われているようです。
新しくthread作ってそこで実行しているつもりはないのですが、
ActionListenerの中でやっているからでしょうか?

評価

0

実行は再生マークから行っていて、デバッグはしていません。
優先順位の設定方がよくわからなかったので
jarはとりあえずこのままで行こうかと思います。

評価

0

きちんとエラーメッセージで調べてみたら原因がわかりました。

VMの引数に
-XstartOnFirstThread
をつけたところ実行できました。

MacOSXでSWTのJavaアプリを起動出来ない - YUJimny備忘録
http://d.hatena.ne.jp/yujimny/20141103/1415005358

その時こんなメッセージがでました。
java[779:82715] *** WARNING: Method userSpaceScaleFactor in 
class NSWindow is deprecated on 10.7 and later. It should not 
be used in new applications. Use convertRectToBacking: 
instead. 

私が使っているMac OS X Yosemite 10.10.5では非推奨のものが使
われているのかもしれません。

評価

0

MacはWebKitの方が流行ってるんですかね
http://myakura.github.io/n/webkit4devs.html

評価

0

>優先順位の設定方がよくわからなかったので
>jarはとりあえずこのままで行こうかと思います。

eclipseであれば
Project>Properties>JavaBuildPath>OrderAndExport

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。