2012-01-27 27 views
12

Làm thế nào để bạn tạo dự án Scala SWT trong SBT?Dự án Scala SWT với SBT

Tôi biết rằng bạn có thể sử dụng kho GIT:

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

Nhưng tôi không biết làm thế nào và nếu nó là có thể với SWT.

Xin cảm ơn trước, Etam.

EDIT:

tôi phải tải nó bằng tay. Nó biên dịch nhưng khi chạy tôi nhận được không hợp lệ lỗi truy cập chủ đề:

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

Thậm chí nếu tôi sử dụng:

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

Đây là lớp học chính:

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 
} 

Cảm ơn một lần nữa, Etam.

+0

Bạn có tìm thấy giải pháp cho vấn đề này không? – mariosangiorgio

Trả lời

6

Tôi nghĩ cách dễ nhất là tải xuống tệp jar SWT của nền tảng mục tiêu của bạn, đặt dưới thư mục lib/ và nó sẽ hoạt động tốt.

+0

Tôi đang cố gắng tránh giải pháp này;). Nhưng cảm ơn. – Etam

+2

Bây giờ tôi gặp sự cố với lỗi truy cập luồng không hợp lệ ... Bạn có thể xem bản chỉnh sửa của mình không? – Etam

2

Tôi gặp phải lỗi truy cập cùng một chuỗi bạn đã làm. Nó dường như đến từ sbt khởi chạy ứng dụng của bạn như là quá trình con trong cùng một JVM như sbt chính nó đang chạy.

Tôi giải quyết nó bằng cách xây dựng một lọ, và sau đó chạy ứng dụng của tôi bằng tay:

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

Có thể có một giải pháp thanh lịch hơn, nhưng điều này ít nhất đã cho tôi như xa như có thể chạy ứng dụng của tôi.

10

Thêm phần này vào build.sbt của bạn:

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" 
} 

đầu tiên Nó sẽ thêm một trình giải quyết cho kho SWT artifact. Sau đó, nó sẽ phát hiện phiên bản hệ điều hành của bạn và tải xuống một JAR thích hợp cho nó.

Đối với vấn đề truy cập luồng, tôi đã giải quyết vấn đề này trên Mac OS X bằng cách sử dụng JDK 1.6 với nó - khi tôi chỉ định -XstartOnFirstThread ở đó, nó hoạt động tốt. Tôi đã tìm thấy không có giải pháp cho JDK 1.7.

+0

Bạn có thể vui lòng cho tôi biết tôi nên đặt phiên bản JDK phù hợp như thế nào? Khi 'sbt' bắt đầu, tôi nhận được thông báo này 'Chào mừng bạn đến với phiên bản Scala 2.9.1.final (Java HotSpot (TM) 64-Bit Server VM, Java 1.6.0_35) .' nhưng nó vẫn không hoạt động đối với tôi. Tôi đã thêm phụ thuộc mà bạn đã đề xuất và đặt 'javaOptions: = Seq (" - XstartOnFirstThread "," -d64 ")'. – mariosangiorgio

+0

Tôi thường làm điều đó ở cấp độ bash, tôi có một kịch bản thực hiện điều này cho tôi: 'JAVA_HOME =/System/Library/Frameworks/JavaVM.framework/Phiên bản/1.6/Home' ' JDK_HOME = $ JAVA_HOME' 'PATH = $ JAVA_HOME/bin: $ PATH', vì vậy khi 'sbt' chạy nó chọn Java mặc định từ' PATH'. – axel22

+0

Tuy nhiên, có vẻ như bạn đang sử dụng java 1.6 rồi. Không chắc chắn, nhưng có thể là '-XstartOnFirstThread' không được chọn từ' javaOptions'. Tôi thường chạy ứng dụng của tôi một cách riêng biệt thông qua kịch bản, và không thông qua sbt, vì vậy tôi đã không có vấn đề này. Bạn đặt 'javaOptions',' build.sbt' hoặc trong thư mục 'project' ở đâu? – axel22

Các vấn đề liên quan