maven을 사용하여 osx에서 swt를 테스트하려는 샘플 애플리케이션을 만들었습니다. 수백 개의 기사를 읽고 기본 스레드에서 디스플레이를 만들었지 만 앱에서 같은 예외가 발생합니다.Maven을 사용하는 OSX에서 SWT 오류
내 pom 파일과 my sample application을 확인할 수 있습니까?
의 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>asdf.abcd</groupId>
<artifactId>b</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>example</name>
<dependencies>
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId>
<version>4.3</version>
</dependency>
<dependency>
<groupId>org.eclipse.jface</groupId>
<artifactId>jface</artifactId>
<version>3.9.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<arguments>
<argument>-d64</argument>
<argument>-XstartOnFirstThread</argument>
<argument>-classpath</argument>
</arguments>
<mainClass>standalone.App</mainClass>
<addClasspath>true</addClasspath>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>standalone.App</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
예외 : 아이디어와 시간에 대한
###Thread name: standalone.App.main() Thread[standalone.App.main(),5,standalone.App] <-- debug message
***WARNING: Display must be created on main thread due to Cocoa restrictions.
[WARNING]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.eclipse.swt.SWTException: Invalid thread access
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Display.error(Unknown Source)
at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
at org.eclipse.swt.widgets.Display.create(Unknown Source)
at org.eclipse.swt.graphics.Device.<init>(Unknown Source)
at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
at org.eclipse.swt.widgets.Display.getDefault(Unknown Source)
at standalone.App.main(App.java:66)
... 6 more
감사합니다!
답변 주셔서 감사합니다. Greg. pom.xml에 지정했습니다. mvn exec : java exec-maven-plugin 명령을 실행하면 XstartOnFirstThread 인수로 앱이 실행됩니다. 예외 첫 줄에서 앱이 주 스레드에서 실행되는 것을 볼 수 있습니다. 스레드 이름을 출력했습니다. – flatronka
SWT가 보지 않는 것이 아니라면,'NSThread.isMainThread()'가 false를 반환하기 때문에 오류 메시지가 출력됩니다. –
그렉에 감사드립니다! 나는 그것이 어떻게 가능한지 모른다. – flatronka