簡體   English   中英

Java VM在Spring持久層啟動時在Mac OS X下崩潰

[英]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的數據庫連接時會發生錯誤。 該數據庫正在運行。

任何一般的想法如何解決這個問題? 我知道這是一個問題,但如果有更多的信息可以幫助我,請告訴我。 也許有眾所周知的情況會發生這種情況。

更新:

錯誤日志的內容:

Pastebin:hs_err_pid5336.log

如果您檢查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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM