Spring持久层启动时Mac OS X下的Java VM崩溃
我正在开发一个使用Spring数据的Spring应用程序。我们正在使用EclipseLuna(4.4.0)并使用Java8Update20(在更高版本中也会出现同样的问题) 在Windows下从Eclipse启动应用程序时,它工作正常。在Mac OS X下,发生以下错误:Spring持久层启动时Mac OS X下的Java VM崩溃,java,eclipse,spring,macos,Java,Eclipse,Spring,Macos,我正在开发一个使用Spring数据的Spring应用程序。我们正在使用EclipseLuna(4.4.0)并使用Java8Update20(在更高版本中也会出现同样的问题) 在Windows下从Eclipse启动应用程序时,它工作正常。在Mac OS X下,发生以下错误: 2015-04-22 14:26:27.492 INFO 5363 --- [ main] o.s.j.d.DriverManagerDataSource : Loaded JDBC d
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上的某些图形相关。此问题:描述相同的崩溃。建议使用
-Dprism.order=j2d
或-Dprism.order=sw
运行jvm。试试看 在无头环境中嵌入具有JavaFX依赖项的库时,我遇到了这个问题。最初,我使用Swing容器构建了一个JavaFX引导包装器。此设置导致JVM因所述的崩溃转储而崩溃
我找到了这个解决方案:。我们的想法是删除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上都能顺利运行。java进程的CWD中是否有hs_err文件?如果是这样,请发布它的内容。当然,我在上面的日志中添加了一个链接。正如你在上面的回答中所看到的,它与javaFX有关,但事实证明我们遇到了一个不同的问题。