angryip / angryip/ipscan

Windows 3.10.0 crashes on startup: UnsatisfiedLinkError - swt-gdip-win32 missing (stripped from build)

Abierto
#532 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Java
Estrellas
5.1k
Forks
835
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

## Description

Angry IP Scanner 3.10.0 fails to start on Windows (both the portable `ipscan-3.10.0-win.exe` and the official `ipscan-3.10.0-setup.exe` installer with bundled Java 25). The main window fails to render with an `UnsatisfiedLinkError` because SWT's `swt-gdip-win32-*.dll` cannot be found.

## Steps to reproduce

1. Download `ipscan-3.10.0-win.exe` (or install via `ipscan-3.10.0-setup.exe`) on Windows 10/11 x86_64
2. Run it
3. Application throws `SWTException` / `UnsatisfiedLinkError` while drawing the main window and crashes

## Error

org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
no swt-gdip-win32-4973r12 in java.library.path: ...
no swt-gdip-win32 in java.library.path: ...
no swt-gdip in java.library.path: ...
Can't load library: C:\Users.swt\lib\win32\x86_64\swt-gdip-win32-4973r12.dll
Can't load library: C:\Users.swt\lib\win32\x86_64\swt-gdip-win32.dll
Can't load library: C:\Users.swt\lib\win32\x86_64\swt-gdip.dll
)
at org.eclipse.swt.SWT.error(SWT.java:4934)
at org.eclipse.swt.SWT.error(SWT.java:4849)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4136)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3752)
at net.azib.ipscan.gui.GUI.showMainWindow(GUI.java:56)
at net.azib.ipscan.Main.main(Main.java:62)
Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:
...
at org.eclipse.swt.internal.gdip.Gdip.(Gdip.java:21)
at org.eclipse.swt.internal.gdip.GdiplusStartupInput.(GdiplusStartupInput.java:25)
at org.eclipse.swt.graphics.Device.checkGDIP(Device.java:226)
at org.eclipse.swt.graphics.Transform.(Transform.java:144)
at org.eclipse.swt.graphics.Transform.(Transform.java:75)
at org.eclipse.swt.graphics.GC.drawImage(GC.java:1045)
at org.eclipse.swt.widgets.Label.wmDrawChildImage(Label.java:571)
...

## Root cause

In `build.gradle`, the packaging step strips several native SWT libraries from the shaded jar as apparently-unused, including `swt-gdip-*.dll`:

https://github.com/angryip/ipscan/blob/master/build.gradle

'swt-awt-.dll',
'swt-wgl-.dll',
'swt-gdip-.dll',
'swt-webkit-.dll',

However, SWT 3.134.0 (`org.eclipse.platform:org.eclipse.swt.win32.win32.x86_64:3.134.0`) actually needs `swt-gdip-win32-*.dll` at runtime — `GC.drawImage()` internally creates a `Transform`, which requires GDI+ (`Device.checkGDIP` → `Gdip.`), and that in turn needs the native `swt-gdip-win32` JNI bridge. This is hit unconditionally while drawing a `Label` image in the main window, so every Windows x86_64 user hits this crash on startup.

## Confirmed workaround

Manually extracting `swt-gdip-win32-4973r12.dll` from the official `org.eclipse.swt.win32.win32.x86_64-3.134.0.jar` on Maven Central and placing it into `%USERPROFILE%\.swt\lib\win32\x86_64\` fixes the crash — the app starts and runs normally. This confirms the DLL is simply missing from the distributed exe/jar, not a system-specific issue.

## Suggested fix

Remove `swt-gdip-*.dll` from the strip/exclude list in `build.gradle` so it's bundled in the Windows build, since it's actually required by this SWT version.

## Environment

- ipscan 3.10.0 (win.exe and setup.exe, both reproduce)
- Windows 10, x86_64
- Reproduces with both system Java 21 (Corretto) and the bundled Java 25 (installer)

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.