2012-01-27 19 views
12

SBTでのScala SWTプロジェクトの作成方法を教えてください。SBTを使用したScala SWTプロジェクト

私はあなたがGITリポジトリを使用することができることを知っている:

RootProject(uri("http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.binaries.git")) 

しかし、私はそれはSWTで可能であるかとかどうかを知りません。

ありがとうございます。 Etam。

EDIT

私はそれを手動でダウンロードする必要がありました。私は無効なスレッドアクセスエラーを取得する実行しながら、コンパイルされますが:

***WARNING: Display must be created on main thread due to Cocoa restrictions. 
[error] (run-main) org.eclipse.swt.SWTException: Invalid thread access 

私が使用している場合でも:

javaOptions := Seq("-XstartOnFirstThread", "-d64") 

これはメインクラスです:

import org.eclipse.swt._ 
import org.eclipse.swt.layout._ 
import org.eclipse.swt.widgets._ 

object Main extends App { 
    val display = new Display 
    val shell = new Shell(display) 
    shell.setLayout(new GridLayout()) 
    shell.pack 
    shell.open 
    while (!shell.isDisposed) { 
     if (!display.readAndDispatch) 
      display.sleep 
    } 
    display.dispose 
} 

おかげで再び、 エタム。

+0

この問題の解決方法をお探しですか? – mariosangiorgio

答えて

6

あなたのターゲットプラットフォームのSWT jarファイルをダウンロードするのが最も簡単な方法は、lib/というフォルダの下に置くとうまくいくと思います。

+0

私はこの解決策を避けようとしています。しかし、ありがとう。 – Etam

+2

無効なスレッドアクセスエラーが発生しました...私の編集を見ていただけますか? – Etam

2

同じスレッドアクセスエラーが発生しました。 sbt自体が実行されているのと同じJVMでサブプロセスとしてアプリケーションを起動するsbtから来ているようです。

scala -classpath "target/scala-2.9.1/foobar-0.0.1.jar:lib/swt-debug.jar" -J"-XstartOnFirstThread" foo.bar.HelloWorld 

よりエレガントな解決策があるかもしれませんが、これは、少なくとも私のアプリケーションを実行することができるという限り私を得た:

私は手動で自分のアプリケーションをjarファイルを構築し、次に実行することによって、それを解決しました。

10

は、あなたのbuild.sbtにこれを追加します。

resolvers += "swt-repo" at "http://maven-eclipse.github.io/maven" 

libraryDependencies += { 
    val os = (sys.props("os.name"), sys.props("os.arch")) match { 
    case ("Linux", _) => "gtk.linux.x86" 
    case ("Mac OS X", "amd64" | "x86_64") => "cocoa.macosx.x86_64" 
    case ("Mac OS X", _) => "cocoa.macosx.x86" 
    case (os, "amd64") if os.startsWith("Windows") => "win32.win32.x86_64" 
    case (os, _) if os.startsWith("Windows") => "win32.win32.x86" 
    case (os, arch) => sys.error("Cannot obtain lib for OS '" + os + "' and architecture '" + arch + "'") 
    } 
    val artifact = "org.eclipse.swt." + os 
    "org.eclipse.swt" % artifact % "4.6.1" 
} 

それは最初のSWTアーティファクトリポジトリのリゾルバを追加します。 これでOSのバージョンが検出され、適切なJARがダウンロードされます。

スレッドアクセスの問題については、Mac OS XでJDK 1.6を使って解決しました。そこに-XstartOnFirstThreadと指定するとうまくいきます。私はJDK 1.7のための解決策を見つけませんでした。

+0

適切なJDKバージョンを設定する方法を教えてください。 'sbt'が起動すると、このメッセージが表示されます。「Scalaバージョン2.9.1.final(Java HotSpot(TM)64ビットサーバVM、Java 1.6.0_35)へようこそ。」というメッセージが表示されますが、まだ動作しません。 あなたが提案した依存関係を追加し、 'javaOptions:= Seq(" - XstartOnFirstThread "、" -d64 ")'を設定しました。 – mariosangiorgio

+0

私は通常bashレベルでそれを行います。これは私のためのスクリプトです: 'JAVA_HOME =/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home' ' JDK_HOME = $ JAVA_HOME' 'PATH = $ JAVA_HOME/bin:$ PATH'となるので、 'sbt'を実行すると' PATH'からデフォルトのJavaを選びます。 – axel22

+0

しかし、すでにJava 1.6を使用しているようです。わかりませんが、 '-XstartOnFirstThread'が' javaOptions'から選択されていない可能性があります。私は通常、スクリプトを介してアプリケーションを別々に実行し、sbtでは実行しないため、この問題は発生しませんでした。あなたは 'javaOptions'、' build.sbt'あるいは 'project'ディレクトリにどこを設定しますか? – axel22

関連する問題