与SBT的Scala SWT项目

Eta*_*tam 12 swt scala sbt

如何在SBT中创建Scala SWT项目?

我知道你可以使用GIT存储库:

RootProject(uri("http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.binaries.git"))
Run Code Online (Sandbox Code Playgroud)

但我不知道如何以及SWT是否可行.

在此先感谢,Etam.

编辑:

我不得不手动下载它.它编译但运行时我得到无效的线程访问错误:

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

即使我使用:

javaOptions := Seq("-XstartOnFirstThread", "-d64")
Run Code Online (Sandbox Code Playgroud)

这是主要类:

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
}
Run Code Online (Sandbox Code Playgroud)

再次感谢,Etam.

axe*_*l22 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"
}
Run Code Online (Sandbox Code Playgroud)

它将首先为SWT工件库添加一个解析器.然后它将检测您的操作系统版本并为其下载适当的JAR.

至于线程访问问题,我在Mac OS X上通过使用JDK 1.6解决了这个问题 - 当我指定它时-XstartOnFirstThread,它工作正常.我找不到JDK 1.7的解决方案.


Bri*_*Hsu 6

我认为最简单的方法是下载目标平台的SWT jar文件,把它放在lib/文件夹下,它会正常工作.

  • 现在我遇到了无效线程访问错误的问题......你能看一下我的编辑吗? (2认同)