Skip to content

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

Description

@Al-Kom

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.<clinit>), 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)

Activity

  1. jgwallace3 commented on Sep 5, 2026

    @jgwallace3

    Workaround worked for me. Found the jar here: https://repo1.maven.org/maven2/org/eclipse/platform/org.eclipse.swt.win32.win32.x86_64/3.134.0/org.eclipse.swt.win32.win32.x86_64-3.134.0.jar, extracted the dlls and moved the indicated one to the .swt dir. Thx!

  2. nbcr commented on Sep 6, 2026

    @nbcr

    Fix Available

    The root cause has been identified and fixed: the swt-gdip-*.dll exclusion in �uild.gradle line 151 was preventing SWT 3.134.0's required GDI+ library from being bundled.

    Solution

    Both include the GDI+ DLL bundled and the application starts without crashes.

    Details

    SWT 3.134.0 requires swt-gdip-win32-*.dll for graphics rendering. The GC.drawImage() method calls Device.checkGDIP(), which loads the native GDI+ library - this happens unconditionally when drawing the main window. Without the DLL, users get UnsatisfiedLinkError and the application crashes.

    The fix simply removes the 'swt-gdip-*.dll' line from the exclude list in build.gradle, ensuring the library is bundled in Windows builds.

    Tested and confirmed working on Windows 11 with Java 25.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions