Однако я могу даже не воспроизвожу пример кода, который есть на github, без сбоя JVM.
Подводя итог: Я использую Ubuntu Gnome 22.04 с openJdk 17.0.1+ 12, SWT 4.3, и сбой происходит вне JVM в собственном коде. Проблемный фрейм — [libc.so.6+0x97ef4] pthread_mutex_lock+0x4
Подробнее, вот мой код, взятый и упрощенный из примера, найденного на github (ссылка здесь)
Код: Выделить всё
package com.testmaven.test.equo;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import com.equo.chromium.ChromiumBrowser;
import com.equo.chromium.swt.Browser;
public class SampleSWT {
private static final String URL = "https://docs.equo.dev/main/getting-started/introduction.html";
public static void main(String[] args) throws ClassNotFoundException {
ChromiumBrowser.earlyInit();
Display display = Display.getDefault();
Shell shell = new Shell(display);
shell.setSize(300, 300);
shell.setLayout(new GridLayout(1, false));
shell.setText("Bug report");
System.setProperty("chromium.debug", "true");
ChromiumBrowser.earlyInit();
Browser browser = new Browser(shell, SWT.NONE);
browser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
browser.setUrl(URL);
Button button = new Button(shell, SWT.PUSH);
//button.setText("Hello");
//button.pack();
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
browser.execute(
"alert('hello')");
System.out.println("\nbutton clicked");
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
Код: Выделить всё
Equo-Chromium
https://dl.equo.dev/chromium-swt-ce/oss/mvn
org.eclipse.swt
org.eclipse.swt.gtk.linux.x86_64
4.3
provided
commons-io
commons-io
2.17.0
com.equo
com.equo.chromium
124.0.0
com.equo
com.equo.chromium.cef.gtk.linux.x86_64
124.0.0
- пользовательский интерфейс не должен давать сбой
- при нажатии на кнопку должно появиться окно «Привет» из JavaScript.
- Пользовательский интерфейс аварийно завершает работу при запуске со следующим выводом
Код: Выделить всё
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fef42a97ef4, pid=57972, tid=57977
#
# JRE version: OpenJDK Runtime Environment Temurin-17.0.1+12 (17.0.1+12) (build 17.0.1+12)
# Java VM: OpenJDK 64-Bit Server VM Temurin-17.0.1+12 (17.0.1+12, mixed mode, tiered, > compressed oops, compressed class ptrs, g1 gc, linux-amd64)
# Problematic frame:
# C [libc.so.6+0x97ef4] pthread_mutex_lock+0x4
#
# Core dump will be written. Default location: Core dumps may be processed with "/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E" (or dumping to /media/guillaume/Docs_cabine/Source/TestMaven/test.equo/core.57972)
#
# If you would like to submit a bug report, please visit:
# https://github.com/adoptium/adoptium-support/issues
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
--------------- S U M M A R Y ------------
Command Line: -Dfile.encoding=UTF-8 -XX:+ShowCodeDetailsInExceptionMessages > com.testmaven.test.equo.SampleSWT
Host: Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz, 8 cores, 7G, Ubuntu 22.04.5 LTS
Time: Wed Oct 2 16:04:17 2024 CEST elapsed time: 6.717892 seconds (0d 0h 0m 6s)
--------------- T H R E A D ---------------
Current thread (0x00007fef3c0248b0): JavaThread "main" [_thread_in_native, id=57977, > stack(0x00007fef42900000,0x00007fef42a00000)]
Stack: [0x00007fef42900000,0x00007fef42a00000], sp=0x00007fef429fa3b8, free space=1000k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libc.so.6+0x97ef4] pthread_mutex_lock+0x4
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J 822 org.eclipse.swt.internal.gtk.GTK._gtk_main_do_event(J)V (0 bytes) @ > 0x00007fef31306ce1 [0x00007fef31306ca0+0x0000000000000041]
J 814 c1 org.eclipse.swt.widgets.Display.eventProc(JJ)J (185 bytes) @ 0x00007fef29ef8584 > [0x00007fef29ef80c0+0x00000000000004c4]
v ~StubRoutines::call_stub
j org.eclipse.swt.internal.gtk.GTK._gtk_dialog_run(J)I+0
j org.eclipse.swt.internal.gtk.GTK.gtk_dialog_run(J)I+8
j org.eclipse.swt.widgets.MessageBox.open()I+312
j com.equo.chromium.swt.internal.Chromium.lambda$24(Lorg/cef/handler/CefJSDialogHandler$JSDialogType;ZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/function/Consumer;)V+183
j com.equo.chromium.swt.internal.Chromium$$Lambda$49+0x0000000100124f50.run()V+28
j org.eclipse.swt.widgets.RunnableLock.run(Lorg/eclipse/swt/widgets/Display;)V+11
J 745 c1 org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Z)Z (192 bytes) @ 0x00007fef29ee00f4 [0x00007fef29edff60+0x0000000000000194]
J 720 c1 org.eclipse.swt.widgets.Display.readAndDispatch()Z (79 bytes) @ 0x00007fef29ed40d4 [0x00007fef29ed3ce0+0x00000000000003f4]
j com.testmaven.test.equo.SampleSWT.main([Ljava/lang/String;)V+121
v ~StubRoutines::call_stub
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000010
Register to memory mapping:
- Закомментирование следующих двух строк предотвратит Пользовательский интерфейс не вылетает при запуске
Код: Выделить всё
//button.setText("hello")
//button.pack();
Код: Выделить всё
button clicked
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007fef42a97ef4, pid=57972, tid=57977
- При запуске нескольких тестов поведение не всегда единообразно. Выход из сеанса Gnome и повторный вход заставят систему снова вести себя так, как я описал выше.
- Я пробовал другие версии Ubuntu и протестировал тот же код с помощью Wayland вместо Xorg, даже попробовал Unity вместо Gnome, с теми же результатами.
- Погуглил "проблемный фрейм" [libc.so.6+0x97ef4] pthread_mutex_lock+0x4" действительно возвращает несколько результатов, но в каждом случае либо не нашли убедительного решения, либо оно выше моего уровня знаний и понимания.
Есть ли у кого-нибудь опыт использования Equo Chromium с SWT в Ubuntu?
Из того, что я могу понять, сбой, похоже, связан с определенными вещами, происходящими в пользовательском интерфейсе, что заставляет меня думать о проблеме с многопоточностью. Считаете ли вы, что это следует рассматривать как ошибку в equo.chromium.cef.gtk.linux.x86_64?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -on-ubuntu
Мобильная версия