Skip to content

Moving Log window divider to top while maximized causes rendering errors and UI freeze #78

@zindy

Description

@zindy

IMPORTANT!

This section is only for bug reports, which must follow the template below.

Please post any other questions to the official QuPath forum at https://forum.image.sc/tags/qupath

If in doubt, use image.sc. This helps us keep things organized.

Before we begin...

Before submitting your bug report, please check the following:

  • I've definitely found a bug (it you're not sure, please use image.sc instead)
  • I've checked https://qupath.github.io for a new release that might already have fixed the issue
  • I've checked the Changelog to see if the bug has already been fixed in the next release
  • I've checked for existing GitHub issues describing the same problem

Bug report

This is something I'm noticing in 0.7.0rc1 (both the one you compiled and the one I compile from main).

Describe the bug

Guardrail already in place: If you move the divider between the log list and the details pane all the way to its top allowed position, layout calculation errors occur but are properly handled:

Mar 02, 2026 11:30:40 AM javafx.scene.control.skin.VirtualFlow addTrailingCells
INFO: index exceeds maxCellCount. Check size calculations for class javafx.scene.control.TableRow

However, if the Log window is maximised and the same action is performed, the errors are no longer handled.

The (repeating) error message ```text 11:10:30.522 [JavaFX Application Thread] [INFO ] qupath.lib.gui.QuPathApp - Starting QuPath with parameters: [] Mar 02, 2026 11:10:59 AM javafx.scene.control.skin.VirtualFlow addTrailingCells INFO: index exceeds maxCellCount. Check size calculations for class javafx.scene.control.TableRow Mar 02, 2026 11:11:07 AM javafx.scene.control.skin.VirtualFlow addTrailingCells INFO: index exceeds maxCellCount. Check size calculations for class javafx.scene.control.TableRow Mar 02, 2026 11:11:07 AM javafx.scene.control.skin.VirtualFlow addTrailingCells INFO: index exceeds maxCellCount. Check size calculations for class javafx.scene.control.TableRow java.lang.NullPointerException: Cannot invoke "com.sun.prism.d3d.D3DTextureData.getContext()" because the return value of "com.sun.prism.d3d.D3DTextureResource.getResource()" is null at com.sun.prism.d3d.D3DTexture.getContext(D3DTexture.java:85) at com.sun.prism.d3d.D3DTexture.update(D3DTexture.java:210) at com.sun.prism.d3d.D3DTexture.update(D3DTexture.java:154) at com.sun.prism.impl.BaseContext.flushMask(BaseContext.java:115) at com.sun.prism.impl.BaseContext.drawQuads(BaseContext.java:124) at com.sun.prism.impl.VertexBuffer.flush(VertexBuffer.java:98) at com.sun.prism.impl.BaseContext.flushVertexBuffer(BaseContext.java:107) at com.sun.prism.impl.ps.BaseShaderContext.checkState(BaseShaderContext.java:685) at com.sun.prism.impl.ps.BaseShaderContext.validatePaintOp(BaseShaderContext.java:504) at com.sun.prism.impl.ps.BaseShaderContext.validatePaintOp(BaseShaderContext.java:371) at com.sun.prism.impl.ps.BaseShaderGraphics.renderGeneralRoundedPgram(BaseShaderGraphics.java:924) at com.sun.prism.impl.ps.BaseShaderGraphics.renderGeneralRoundedRect(BaseShaderGraphics.java:625) at com.sun.prism.impl.ps.BaseShaderGraphics.fillRect(BaseShaderGraphics.java:1532) at com.sun.javafx.sg.prism.NGRegion.renderBackgroundRectanglesDirectly(NGRegion.java:1112) at com.sun.javafx.sg.prism.NGRegion.renderBackgroundRectangle(NGRegion.java:852) at com.sun.javafx.sg.prism.NGRegion.renderAsRectangle(NGRegion.java:754) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:575) at com.sun.javafx.sg.prism.CacheFilter.renderNodeToScreen(CacheFilter.java:700) at com.sun.javafx.sg.prism.CacheFilter.render(CacheFilter.java:626) at com.sun.javafx.sg.prism.NGNode.renderCached(NGNode.java:2343) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2054) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579) at com.sun.javafx.sg.prism.NGNode.renderForClip(NGNode.java:2279) at com.sun.javafx.sg.prism.NGNode.renderRectClip(NGNode.java:2186) at com.sun.javafx.sg.prism.NGNode.renderClip(NGNode.java:2213) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2057) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955) at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:266) at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:579) at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2063) at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1955) at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:481) at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:321) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:92) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:122) at java.base/java.lang.Thread.run(Unknown Source) java.lang.NullPointerException: Cannot invoke "com.sun.prism.d3d.D3DTextureData.getContext()" because the return value of "com.sun.prism.d3d.D3DTextureResource.getResource()" is null at com.sun.prism.d3d.D3DTexture.getContext(D3DTexture.java:85) at com.sun.prism.d3d.D3DTexture.update(D3DTexture.java:210) at com.sun.prism.d3d.D3DTexture.update(D3DTexture.java:154) at com.sun.prism.impl.BaseContext.flushMask(BaseContext.java:115) at com.sun.prism.impl.BaseContext.drawQuads(BaseContext.java:124) at com.sun.prism.impl.VertexBuffer.flush(VertexBuffer.java:98) at com.sun.prism.impl.BaseContext.flushVertexBuffer(BaseContext.java:107) at com.sun.prism.impl.ps.BaseShaderContext.setRenderTarget(BaseShaderContext.java:791) at com.sun.prism.impl.BaseContext.setRenderTarget(BaseContext.java:149) at com.sun.prism.impl.BaseGraphics.(BaseGraphics.java:107) at com.sun.prism.impl.ps.BaseShaderGraphics.(BaseShaderGraphics.java:84) at com.sun.prism.d3d.D3DGraphics.(D3DGraphics.java:40) at com.sun.prism.d3d.D3DGraphics.create(D3DGraphics.java:63) at com.sun.prism.d3d.D3DSwapChain.createGraphics(D3DSwapChain.java:148) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:88) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:122) at java.base/java.lang.Thread.run(Unknown Source) java.lang.NullPointerException: Cannot invoke "com.sun.prism.d3d.D3DTextureData.getContext()" because the return value of "com.sun.prism.d3d.D3DTextureResource.getResource()" is null at com.sun.prism.d3d.D3DTexture.getContext(D3DTexture.java:85) at com.sun.prism.d3d.D3DTexture.update(D3DTexture.java:210) at com.sun.prism.d3d.D3DTexture.update(D3DTexture.java:154) at com.sun.prism.impl.BaseContext.flushMask(BaseContext.java:115) at com.sun.prism.impl.BaseContext.drawQuads(BaseContext.java:124) at com.sun.prism.impl.VertexBuffer.flush(VertexBuffer.java:98) at com.sun.prism.impl.BaseContext.flushVertexBuffer(BaseContext.java:107) at com.sun.prism.impl.ps.BaseShaderContext.setRenderTarget(BaseShaderContext.java:791) at com.sun.prism.impl.BaseContext.setRenderTarget(BaseContext.java:149) at com.sun.prism.impl.BaseGraphics.(BaseGraphics.java:107) at com.sun.prism.impl.ps.BaseShaderGraphics.(BaseShaderGraphics.java:84) at com.sun.prism.d3d.D3DGraphics.(D3DGraphics.java:40) at com.sun.prism.d3d.D3DGraphics.create(D3DGraphics.java:63) at com.sun.prism.d3d.D3DSwapChain.createGraphics(D3DSwapChain.java:148) at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:88) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown Source) at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:122) at java.base/java.lang.Thread.run(Unknown Source) ```

After the error occurs, the log window becomes completely unresponsive (see screenshot after trying to unmaximise the window and stretching it).

To Reproduce

Steps to reproduce the behavior:

  1. Right after opening 0.7.0rc1, press Ctrl-Shift-L
  2. Maximise the log window (win + up arrow)
  3. move the divider towards the log entries.
  4. See error messages pasted above

Screenshots

Image

Desktop (please complete the following information):

  • OS: Windows 10
  • QuPath Version: 0.7.0rc1, and snapshot compiled from main.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions