[英]Java VM crashes under Mac OS X on Spring persistence layer startup
我正在開發一個使用Spring Data的Spring應用程序。 我們正在使用Eclipse Luna(4.4.0)並使用Java 8更新20(更高版本中會出現同樣的問題)。
在Windows下從Eclipse啟動應用程序時,它工作正常。 在Mac OS X下,出現以下錯誤:
2015-04-22 14:26:27.492 INFO 5363 --- [ main] o.s.j.d.DriverManagerDataSource : Loaded JDBC driver: com.mysql.jdbc.Driver
2015-04-22 14:26:27.590 INFO 5363 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'jpaPersistenceUnit'
2015-04-22 14:26:28.715 INFO 5363 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'jpaPersistenceUnit'
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fff890330dd, pid=5363, tid=30215
#
# JRE version: Java(TM) SE Runtime Environment (8.0_20-b26) (build 1.8.0_20-b26)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.20-b23 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# C [libobjc.A.dylib+0x10dd] objc_msgSend+0x1d
正如您所看到的,在初始化與mysql的數據庫連接時會發生錯誤。 該數據庫正在運行。
任何一般的想法如何解決這個問題? 我知道這是一個問題,但如果有更多的信息可以幫助我,請告訴我。 也許有眾所周知的情況會發生這種情況。
更新:
錯誤日志的內容:
如果您檢查hs_err文件中的本機堆棧跟蹤,似乎與Mac上的某些圖形內容相關。 這個問題: 如何在JavaFX中禁用或繞過硬件圖形加速(Prism)描述同樣的崩潰。 建議使用-Dprism.order=j2d
或-Dprism.order=sw
來運行jvm。 試試吧!
嘗試在無頭環境中嵌入具有JavaFX依賴性的庫時,我遇到了這個問題。 最初我使用Swing容器構建了一個JavaFX引導包裝器。 此設置導致JVM與上述故障轉儲一起崩潰。
我找到了這個解決方案: https : //stackoverflow.com/a/25969138/2633009 。 我們的想法是刪除Swing包裝器並使用以下代碼啟動JavaFX環境:
import javafx.application.Application;
import javafx.stage.Stage;
public class JavaFXInitializer extends Application {
private static Object barrier = new Object();
@Override
public void start(final Stage primaryStage) throws Exception {
synchronized (barrier) {
barrier.notify();
}
}
public static void initialize() throws InterruptedException {
Thread t = new Thread("JavaFX Init Thread") {
@Override
public void run() {
Application.launch(JavaFXInitializer.class, new String[0]);
}
};
t.setDaemon(true);
t.start();
synchronized (barrier) {
barrier.wait();
}
}
}
然后在啟動時使用以下命令在主應用程序中調用:
try {
JavaFXInitializer.initialize();
} catch (InterruptedException e) {
// Failed to initialise JavaFX
e.printStackTrace();
}
我的Spring應用程序現在可以在OSX和Windows上順利運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.