Skip to content

VisualVM window opens off-screen when external monitors are disconnected (Windows) #650

@sebthom

Description

@sebthom

Describe the bug
When using VisualVM on a Windows 10 laptop with external monitors, the application window opens off-screen after the external monitors are disconnected. The main window cannot be seen or accessed, even though VisualVM is running.

To Reproduce
Steps to reproduce the behavior:

  1. Connect one or more external monitors to a Windows 10 laptop.
  2. Open VisualVM and move its main window to an external monitor.
  3. Close VisualVM.
  4. Disconnect the external monitor(s), leaving only the laptop display active.
    1.Start VisualVM again.
  5. The window does not appear on the visible display.

Expected behavior
VisualVM should detect when its last saved window position is no longer valid (outside visible screen bounds) and automatically reposition the window onto an available display (e.g. centered on the laptop screen).

VisualVM log

-------------------------------------------------------------------------------
>Log Session: Sunday, November 2, 2025, 6:31:05 PM Central European Standard Time
>System Info: 
  Product Version         = VisualVM 2.2
  Operating System        = Windows 10 version 10.0 running on amd64
  Java; VM; Vendor        = 21.0.2; OpenJDK 64-Bit Server VM 21.0.2+13-jvmci-23.1-b30; GraalVM Community
  Runtime                 = OpenJDK Runtime Environment 21.0.2+13-jvmci-23.1-b30
  Java Home               = C:\apps\jdk21
  System Locale; Encoding = en_US (visualvm); UTF-8
  Home Directory          = C:\Users\User
  Current Directory       = C:\Windows\system32
  User Directory          = C:\Users\User\AppData\Roaming\VisualVM\2.2
  Cache Directory         = C:\Users\User\AppData\Local\VisualVM\Cache\2.2
  Installation            = C:\apps\visualvm_220\visualvm
                            C:\apps\visualvm_220\platform
  Boot & Ext. Classpath   = 
  Application Classpath   = C:\apps\visualvm_220\platform\lib\boot.jar;C:\apps\visualvm_220\platform\lib\org-openide-modules.jar;C:\apps\visualvm_220\platform\lib\org-openide-util-lookup.jar;C:\apps\visualvm_220\platform\lib\org-openide-util-ui.jar;C:\apps\visualvm_220\platform\lib\org-openide-util.jar
  Startup Classpath       = C:\apps\visualvm_220\platform\core\asm-9.7.jar;C:\apps\visualvm_220\platform\core\asm-commons-9.7.jar;C:\apps\visualvm_220\platform\core\asm-tree-9.7.jar;C:\apps\visualvm_220\platform\core\core-base.jar;C:\apps\visualvm_220\platform\core\core.jar;C:\apps\visualvm_220\platform\core\org-netbeans-libs-asm.jar;C:\apps\visualvm_220\platform\core\org-openide-filesystems.jar;C:\apps\visualvm_220\visualvm\core\org-graalvm-visualvm-modules-startup.jar;C:\apps\visualvm_220\visualvm\core\locale\core_visualvm.jar
-------------------------------------------------------------------------------
INFO [org.graalvm.visualvm.modules.startup.ImportSettings]: Importing from C:\Users\User\AppData\Roaming\VisualVM\2.1.9 to C:\Users\User\AppData\Roaming\VisualVM\2.2
INFO [org.netbeans.core.startup.NbEvents]: Turning on modules:
	org.openide.util.lookup [8.58 20250323-0d0bfcf3fa]
	org.openide.util [9.32 20250323-0d0bfcf3fa]
	org.openide.util.ui [9.33 20250323-0d0bfcf3fa]
	org.openide.modules [7.72 20250323-0d0bfcf3fa]
	org.netbeans.api.annotations.common/1 [1.52 20250323-0d0bfcf3fa]
	org.openide.filesystems [9.37 20250323-0d0bfcf3fa]
	org.openide.awt [7.92 20250323-0d0bfcf3fa]
	org.netbeans.api.progress/1 [1.72 20250323-0d0bfcf3fa]
	org.netbeans.api.progress.nb [1.72 20250323-0d0bfcf3fa]
	org.openide.dialogs [7.71 20250323-0d0bfcf3fa]
	org.openide.nodes [7.69 20250323-0d0bfcf3fa]
	org.openide.windows [6.101 20250323-0d0bfcf3fa]
	org.netbeans.modules.editor.mimelookup/1 [1.64 20250323-0d0bfcf3fa]
	org.openide.text [6.92 20250323-0d0bfcf3fa]
	org.netbeans.api.scripting [1.21 20250323-0d0bfcf3fa]
	org.netbeans.swing.tabcontrol [1.81 20250323-0d0bfcf3fa]
	org.netbeans.swing.outline [1.58 20250323-0d0bfcf3fa]
	org.openide.explorer [6.86 20250323-0d0bfcf3fa]
	org.openide.actions [6.63 20250323-0d0bfcf3fa]
	org.netbeans.modules.queries/1 [1.67 20250323-0d0bfcf3fa]
	org.netbeans.api.templates [1.32 20250323-0d0bfcf3fa]
	org.openide.filesystems.nb [9.34 20250323-0d0bfcf3fa]
	org.openide.loaders [7.94 20250323-0d0bfcf3fa]
	org.netbeans.api.intent [1.26 20250323-0d0bfcf3fa]
	org.netbeans.api.io [1.27 20250323-0d0bfcf3fa]
	org.openide.io [1.73 20250323-0d0bfcf3fa]
	org.netbeans.swing.plaf [1.66 20250323-0d0bfcf3fa]
	org.netbeans.modules.keyring [1.48 20250323-0d0bfcf3fa]
	org.netbeans.libs.asm [5.27 20250323-0d0bfcf3fa]
	org.netbeans.bootstrap/1 [2.103 20250323-0d0bfcf3fa]
	org.netbeans.core.startup.base [1.86.0.1 1 20250323-0d0bfcf3fa]
	org.netbeans.core.startup/1 [1.87.0.1 20250323-0d0bfcf3fa]
	org.netbeans.modules.sampler [1.38 20250323-0d0bfcf3fa]
	org.netbeans.core/2 [3.75 20250323-0d0bfcf3fa]
	org.netbeans.spi.quicksearch [1.51 20250323-0d0bfcf3fa]
	org.netbeans.modules.options.api/1 [1.69 20250323-0d0bfcf3fa]
	org.netbeans.libs.flatlaf/1 [1.18 3.3 20250323-0d0bfcf3fa]
	org.netbeans.swing.laf.flatlaf [1.17 20250323-0d0bfcf3fa]
	org.netbeans.modules.settings/1 [1.73 20250323-0d0bfcf3fa]
	org.netbeans.modules.sendopts/2 [2.60 20250323-0d0bfcf3fa]
	org.netbeans.modules.progress.ui [1.57 20250323-0d0bfcf3fa]
	org.netbeans.modules.options.keymap [1.61 20250323-0d0bfcf3fa]
	org.netbeans.libs.jna/2 [2.19 20250323-0d0bfcf3fa]
	org.netbeans.modules.masterfs/2 [2.79.0.2 2 20250323-0d0bfcf3fa]
	org.netbeans.modules.masterfs.windows [1.40 20250323-0d0bfcf3fa]
	org.netbeans.modules.masterfs.ui [2.27.0.2 20250323-0d0bfcf3fa]
	org.netbeans.modules.masterfs.nio2 [1.39 20250323-0d0bfcf3fa]
	org.netbeans.modules.keyring.fallback [1.32 20250323-0d0bfcf3fa]
	org.netbeans.modules.keyring.impl [1.48 20250323-0d0bfcf3fa]
	org.netbeans.modules.editor.mimelookup.impl/1 [1.56 20250323-0d0bfcf3fa]
	org.netbeans.modules.autoupdate.services [1.80 20250323-0d0bfcf3fa]
	org.netbeans.modules.autoupdate.ui [1.70 20250323-0d0bfcf3fa]
	org.netbeans.modules.autoupdate.cli [1.38 20250323-0d0bfcf3fa]
	org.netbeans.libs.jna.platform/2 [2.19 20250323-0d0bfcf3fa]
	org.netbeans.core.windows/2 [2.109 20250323-0d0bfcf3fa]
	org.netbeans.core.ui/1 [1.69 20250323-0d0bfcf3fa]
	org.netbeans.core.network [1.36 20250323-0d0bfcf3fa]
	org.netbeans.core.nativeaccess/1 [1.55 20250323-0d0bfcf3fa]
	org.netbeans.core.multitabs/1 [1.36.0.1 1 20250323-0d0bfcf3fa]
	org.netbeans.core.io.ui/1 [1.54 20250323-0d0bfcf3fa]
	org.graalvm.visualvm.lib.jfluid/2 [2.19 250417]
	org.graalvm.visualvm.lib.charts/2 [2.1 250417]
	org.graalvm.visualvm.lib.common/2 [2.12 250417]
	org.graalvm.visualvm.lib.profiler.api/2 [2.2 250417]
	org.graalvm.visualvm.lib.ui/2 [2.4 250417]
	org.graalvm.visualvm.uisupport/2 [2.1 250417]
	org.graalvm.visualvm.core/2 [2.4 250417]
	org.graalvm.visualvm.host/2 [2.1 250417]
	org.graalvm.visualvm.application/2 [2.4 250417]
	org.graalvm.visualvm.tools/2 [2.4 250417]
	org.graalvm.visualvm.coredump/2 [2.1 250417]
	org.graalvm.visualvm.threaddump/2 [2.1 250417]
	org.graalvm.visualvm.lib.profiler.utilities/2 [2.0 250417]
	org.graalvm.visualvm.lib.profiler.attach/2 [2.4 250417]
	org.graalvm.visualvm.lib.profiler/2 [2.4 250417]
	org.graalvm.visualvm.lib.profiler.snaptracer/2 [2.0 250417]
	org.graalvm.visualvm.profiling/2 [2.3 250417]
	org.graalvm.visualvm.lib.jfluid.heap [1.3 250417]
	org.graalvm.visualvm.lib.profiler.oql/2 [2.0 250417]
	org.graalvm.visualvm.lib.profiler.heapwalker/2 [2.2 250417]
	org.graalvm.visualvm.heapviewer/2 [2.8 250417]
	org.graalvm.visualvm.heapdump/2 [2.1 250417]
	org.graalvm.visualvm.sampler.truffle/2 [2.1 250417]
	org.graalvm.visualvm.sampler/2 [2.2 250417]
	org.graalvm.visualvm.sa/2 [2.0 250417]
	org.graalvm.visualvm.modules.startup/2 [2.1 250417]
	org.graalvm.visualvm.profiler/2 [2.1 250417]
	org.graalvm.visualvm.pluginimporter [1.0 250417]
	org.graalvm.visualvm.nashorn.jdk15 [1.1 250417]
	org.graalvm.visualvm.modules.killapp/1 [1.2 250417]
	org.graalvm.visualvm.modules.appui/2 [2.1 250417]
	org.graalvm.visualvm.jvmstat/2 [2.0 250417]
	org.graalvm.visualvm.jvm/2 [2.0 250417]
	org.graalvm.visualvm.jmx/2 [2.2 250417]
	org.graalvm.visualvm.charts/2 [2.1 250417]
	org.graalvm.visualvm.jfr/2 [2.3 250417]
	org.graalvm.visualvm.jfr.jdk11/2 [2.2 250417]
	org.graalvm.visualvm.jfr.generic/2 [2.5 250417]
	org.graalvm.visualvm.host.views/2 [2.0 250417]
	org.graalvm.visualvm.host.remote/2 [2.0 250417]
	org.graalvm.visualvm.heapviewer.truffle/2 [2.1 250417]
	org.graalvm.visualvm.heapviewer.console/2 [2.0 250417]
	org.graalvm.visualvm.application.views/2 [2.1 250417]
	org.graalvm.visualvm.graalvm/2 [2.0 250417]
	org.graalvm.visualvm.gotosource/2 [2.0 250417]
	org.graalvm.visualvm.attach/2 [2.0 250417]
INFO [org.netbeans.core.network.proxy.NetworkProxyReloader]: System network proxy resolver: Windows
INFO [org.netbeans.core.network.proxy.windows.WindowsNetworkProxy]: Windows system proxy resolver: auto detect
INFO [org.netbeans.core.network.proxy.windows.WindowsNetworkProxy]: Windows system proxy resolver: auto - PAC (http://wpad/wpad.dat)
INFO [org.netbeans.core.network.proxy.NetworkProxyReloader]: System network proxy reloading succeeded.
INFO [org.netbeans.core.network.proxy.ProxyAutoConfig]: InputStream for http://wpad/wpad.dat throws 
java.io.IOException: Server returned HTTP response code: 400 for URL: http://wpad/wpad.dat
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1998)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1599)
	at org.netbeans.core.network.proxy.ProxyAutoConfig.downloadPAC(ProxyAutoConfig.java:158)
[catch] at org.netbeans.core.network.proxy.ProxyAutoConfig.initEngine(ProxyAutoConfig.java:94)
	at org.netbeans.core.network.proxy.ProxyAutoConfig$1.run(ProxyAutoConfig.java:82)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1420)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2035)
INFO [org.netbeans.core.network.proxy.NetworkProxyReloader]: System network proxy - mode: auto
INFO [org.netbeans.core.network.proxy.NetworkProxyReloader]: System network proxy - pac url: http://wpad/wpad.dat
INFO [org.netbeans.core.network.proxy.NetworkProxyReloader]: System network proxy TEST - http host: 
INFO [org.netbeans.core.network.proxy.NetworkProxyReloader]: System network proxy TEST - http port: 0
INFO [org.netbeans.ui.metrics.laf]: USG_LOOK_AND_FEEL
Diagnostic information
Input arguments:
	-XX:ThreadPriorityPolicy=1
	-XX:+UnlockExperimentalVMOptions
	-XX:+EnableJVMCIProduct
	-XX:-UnlockExperimentalVMOptions
	-Xms24m
	-Xmx768m
	-Dnetbeans.accept_license_class=org.graalvm.visualvm.modules.startup.AcceptLicense
	-Dnetbeans.importclass=org.graalvm.visualvm.modules.startup.ImportSettings
	-Dsun.jvmstat.perdata.syncWaitMs=10000
	-Dsun.java2d.noddraw=true
	-Dsun.java2d.d3d=false
	-DTopSecurityManager.disable=true
	-Dorg.netbeans.core.TimeableEventQueue.quantum=360000
	-Dpolyglot.js.nashorn-compat=true
	-Dsun.misc.URLClassPath.disableJarChecking=true
	-Djdk.attach.allowAttachSelf=true
	-Dorg.openide.util.ImageUtilities.level=950
	--add-exports=java.desktop/com.sun.java.swing.plaf.gtk=ALL-UNNAMED
	--add-exports=java.desktop/sun.awt=ALL-UNNAMED
	--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor.event=ALL-UNNAMED
	--add-exports=jdk.internal.jvmstat/sun.jvmstat.monitor=ALL-UNNAMED
	--add-exports=java.desktop/sun.swing=ALL-UNNAMED
	--add-exports=jdk.attach/sun.tools.attach=ALL-UNNAMED
	--add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED
	--add-opens=java.desktop/javax.swing.plaf.synth=ALL-UNNAMED
	--add-opens=java.base/java.net=ALL-UNNAMED
	--add-opens=java.base/java.lang.ref=ALL-UNNAMED
	--add-opens=java.base/java.lang=ALL-UNNAMED
	--add-opens=java.desktop/javax.swing=ALL-UNNAMED
	--add-opens=java.desktop/javax.swing.plaf.basic=ALL-UNNAMED
	-XX:+IgnoreUnrecognizedVMOptions
	-Xms1024m
	-Xmx2048m
	-Djdk.home=C:\apps\jdk21
	-Dnetbeans.home=C:\apps\visualvm_220\platform
	-Dnetbeans.user=C:\Users\User\AppData\Roaming\VisualVM\2.2
	-Dnetbeans.default_userdir_root=C:\Users\User\AppData\Roaming\VisualVM
	-XX:+HeapDumpOnOutOfMemoryError
	-XX:HeapDumpPath=C:\Users\User\AppData\Roaming\VisualVM\2.2\var\log\heapdump.hprof
	-Dsun.awt.keepWorkingSetOnMinimize=true
	-Dnetbeans.dirs=C:\apps\visualvm_220\visualvm
Compiler: HotSpot 64-Bit Tiered Compilers
Heap memory usage: initial 1024,0MB maximum 2048,0MB
Non heap memory usage: initial 7,3MB maximum -1b
Garbage collector: G1 Young Generation (Collections=3 Total time spent=0s)
Garbage collector: G1 Concurrent GC (Collections=4 Total time spent=0s)
Garbage collector: G1 Old Generation (Collections=0 Total time spent=0s)
Classes: loaded=6339 total loaded=6339 unloaded 0
INFO [org.netbeans.core.ui.warmup.DiagnosticTask]: Total memory 64.065.466.368
INFO [null]: Total physical memory 64.065.466.368
INFO [org.graalvm.visualvm.pluginimporter.PluginImporter]: Inspecting plugins took 19 ms
INFO [org.graalvm.visualvm.pluginimporter.Installer]: 7 available plugins for import in C:\Users\User\AppData\Roaming\VisualVM\2.2

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Microsoft Windows [Version 10.0.19045.6456]
  • JDK version: openjdk 21.0.2 2024-01-16
  • Version: 2.2

Additional context
n/a

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions