Scala SWT проект с SBT - PullRequest
       14

Scala SWT проект с SBT

12 голосов
/ 27 января 2012

Как вы создаете проект Scala SWT в SBT?

Я знаю, что вы можете использовать репозитории 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
}

Еще раз спасибо, Etam.

Ответы [ 3 ]

10 голосов
/ 20 сентября 2012

Добавьте это к вашему 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. Затем он обнаружит вашу версию ОС и загрузит соответствующий JAR для нее.

Что касается проблемы с доступом к потокам, я решил эту проблему в Mac OS X, используя с ней JDK 1.6 - когда я указываю -XstartOnFirstThread, он работает нормально. Я не нашел решения для JDK 1.7.

6 голосов
/ 27 января 2012

Я думаю, что самый простой способ - скачать файл SWT jar вашей целевой платформы, поместить его в папку lib/, и он будет работать нормально.

2 голосов
/ 02 марта 2012

Я обнаружил ту же ошибку доступа к потоку, что и вы. Кажется, это происходит из-за того, что sbt запускает ваше приложение как подпроцесс в той же JVM, что и сам sbt.

Я решил это, собрав jar и запустив приложение вручную:

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

Возможно, есть более элегантное решение, но это по крайней мере дало мне возможность запускать мое приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...