Modify

Opened 2 years ago

Closed 22 months ago

#22727 closed defect (fixed)

[PATCH] SOE in ImageviewerDialog#addButtonsForImageLayers

Reported by: GerdP Owned by: team
Priority: normal Milestone: 23.04
Component: Core image mapping Version:
Keywords: template_report Cc:

Description

What steps will reproduce the problem?

  1. Probably not reproducabile. I was mapping with several layers of geotagged images and clicked on the "next image button" (hotkey is "Page Down").

What is the expected result?

no crash

What happens instead?

Please provide any additional information below. Attach a screenshot if possible.

I think there are other bugs with the dialog, e.g. a deleted image isn't handled as expected. If I got this right these errors were fixed a few weeks ago and then re-introduced with the change for the tabbed images.
Let me know if you need more details.

Relative:URL: ^/trunk
Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Last:Changed Date: 2023-02-06 19:39:32 +0100 (Mon, 06 Feb 2023)
Revision:18649
Build-Date:2023-02-07 02:30:55
URL:https://josm.openstreetmap.de/svn/trunk

Identification: JOSM/1.5 (18649 en) Windows 10 64-Bit
OS Build number: Windows 10 Home 2009 (19045)
Memory Usage: 1513 MB / 1972 MB (324 MB allocated, but free)
Java version: 17.0.4+8-LTS, Azul Systems, Inc., OpenJDK 64-Bit Server VM
Look and Feel: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Screen: \Display0 1920×1080 (scaling 1.00×1.00)
Maximum Screen Size: 1920×1080
Best cursor sizes: 16×16→32×32, 32×32→32×32
System property file.encoding: Cp1252
System property sun.jnu.encoding: Cp1252
Locale info: en_DE
Numbers with default locale: 1234567890 -> 1234567890
VM arguments: [-Djpackage.app-version=1.5.18531, --add-modules=java.scripting,java.sql,javafx.controls,javafx.media,javafx.swing,javafx.web, --add-exports=java.base/sun.security.action=ALL-UNNAMED, --add-exports=java.desktop/com.sun.imageio.plugins.jpeg=ALL-UNNAMED, --add-exports=java.desktop/com.sun.imageio.spi=ALL-UNNAMED, --add-opens=java.base/java.lang=ALL-UNNAMED, --add-opens=java.base/java.nio=ALL-UNNAMED, --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED, --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED, --add-opens=java.desktop/javax.imageio.spi=ALL-UNNAMED, --add-opens=java.desktop/javax.swing.text.html=ALL-UNNAMED, --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED, -Djpackage.app-path=%UserProfile%\AppData\Local\JOSM\HWConsole.exe]
Dataset consistency test: No problems found

Plugins:
+ OpeningHoursEditor (35924)
+ RoadSigns (36038)
+ apache-commons (36034)
+ buildings_tools (36011)
+ contourmerge (v0.1.9)
+ ejml (35924)
+ geotools (36028)
+ jackson (36034)
+ jaxb (35952)
+ jts (36004)
+ o5m (35893)
+ opendata (36025)
+ pbf (36034)
+ poly (35976)
+ reltoolbox (35976)
+ reverter (36043)
+ undelete (36011)
+ utilsplugin2 (36011)

Validator rules:
+ c:\josm\core\resources\data\validator\combinations.mapcss
+ c:\josm\core\resources\data\validator\geometry.mapcss
+ c:\josm\core\resources\data\validator\unnecessary.mapcss
+ d:\java_tools\JOSM\mygeometry.mapcss
+ https://josm.openstreetmap.de/josmfile?page=Rules/GermanySpecific&zip=1

Last errors/warnings:
- 00103.821 E: Failed to locate image 'Flag, Blue'
- 00103.822 E: Failed to locate image 'Flag, Blue'
- 00103.822 E: Failed to locate image 'Flag, Blue'
- 00103.824 E: Failed to locate image 'Flag, Blue'
- 00103.825 E: Failed to locate image 'Flag, Blue'
- 00103.826 E: Failed to locate image 'Flag, Blue'
- 01053.819 E: java.io.FileNotFoundException: F:\osm\bilder\2023-01-31\DSC_3978.JPG (Das System kann die angegebene Datei nicht finden)
- 01261.299 W: Unsaved changes - <html>The relation has been changed.<br><br>Do you want to save your changes?</html>
- 01360.051 W: org.openstreetmap.josm.data.osm.search.SearchParseError: Unexpected token: <equals>
- 06170.839 E: Handled by bug report queue: java.lang.StackOverflowError



=== REPORTED CRASH DATA ===
BugReportExceptionHandler#handleException:
No data collected.

Warning issued by: BugReportExceptionHandler#handleException

=== STACK TRACE ===
Thread: AWT-EventQueue-0 (23) of main
java.lang.StackOverflowError
	at java.desktop/javax.swing.UIDefaults.getFromHashtable(Unknown Source)
	at java.desktop/javax.swing.UIDefaults.get(Unknown Source)
	at java.desktop/javax.swing.MultiUIDefaults.get(Unknown Source)
	at java.desktop/javax.swing.UIDefaults.getInt(Unknown Source)
	at java.desktop/javax.swing.UIManager.getInt(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicButtonUI.installDefaults(Unknown Source)
	at java.desktop/com.sun.java.swing.plaf.windows.WindowsButtonUI.installDefaults(Unknown Source)
	at java.desktop/javax.swing.plaf.basic.BasicButtonUI.installUI(Unknown Source)
	at java.desktop/javax.swing.JComponent.setUI(Unknown Source)
	at java.desktop/javax.swing.AbstractButton.setUI(Unknown Source)
	at java.desktop/javax.swing.JButton.updateUI(Unknown Source)
	at java.desktop/javax.swing.AbstractButton.init(Unknown Source)
	at java.desktop/javax.swing.JButton.<init>(Unknown Source)
	at java.desktop/javax.swing.JButton.<init>(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$CloseableTab.<init>(ImageViewerDialog.java:699)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:314)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(Unknown Source)
	at java.base/java.util.stream.IntPipeline$1$1.accept(Unknown Source)
	at java.base/java.util.stream.Streams$RangeIntSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.Spliterator$OfInt.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
	at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.addButtonsForImageLayers(ImageViewerDialog.java:342)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.updateLayers(ImageViewerDialog.java:273)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.displayImages(ImageViewerDialog.java:873)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog$MoveImgDisplayPanel.setVisible(ImageViewerDialog.java:753)
	at org.openstreetmap.josm.gui.layer.geoimage.ImageViewerDialog.lambda$addButtonsForImageLayers$18(ImageViewerDialog.java:342)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)

Attachments (3)

josmbug.JPG (381.7 KB ) - added by GerdP 2 years ago.
22727.patch (5.4 KB ) - added by taylor.smock 23 months ago.
22727.2.patch (4.4 KB ) - added by taylor.smock 23 months ago.
Move title and imgDisplay reparenting code into its own method (from setVisible) and call that method when the selection model for the JTabbedPane changes

Download all attachments as: .zip

Change History (17)

by GerdP, 2 years ago

Attachment: josmbug.JPG added

comment:1 by stoecker, 2 years ago

I think the mutex style finishedAddingButtons handling as bit naive and prone to race conditions.

comment:2 by GerdP, 2 years ago

Don't know if this is important: I have a *.joz file with one GPX layer and one geoimage layer for each "OSM cycling day" in the last 6 months or so, probably +50 for each, a few background image layers. I load this file before I start editing. I can upload the *.joz file if that helps.

comment:3 by skyper, 2 years ago

Component: CoreCore image mapping

comment:4 by taylor.smock, 23 months ago

Ticket #22836 has been marked as a duplicate of this ticket.

in reply to:  1 comment:5 by taylor.smock, 23 months ago

Milestone: 23.04
Summary: Crash report after clicking on "next image button"[PATCH] SOE in ImageviewerDialog#addButtonsForImageLayers

Replying to stoecker:

I think the mutex style finishedAddingButtons handling as bit naive and prone to race conditions.

I probably ought to move it over to a lock, and just use that. TBH, I should have done that in the first place.

by taylor.smock, 23 months ago

Attachment: 22727.patch added

comment:6 by stoecker, 23 months ago

I have the feeling that's not enough, as the last setVisable line still is outside the lock and I think that's the reason of above loop, but it's already 6 weeks I looked at this.

comment:7 by taylor.smock, 23 months ago

I assume you are talking about

        // After that, trigger the visibility set code
        this.getImageTabs().forEach(m -> m.setVisible(m.isVisible()));

The whole point of the boolean finishedAddingButtons was to keep specific parts of setVisible from being called until everything was ready. That is why it (still) needs the other lock/unlock calls.

So that line of code should be called without any locks, as the setVisible call does a lock internally, which should prevent infinite recursion (due to the !this.finishedAddingButtons.isLocked() check).

Last edited 23 months ago by taylor.smock (previous) (diff)

comment:8 by stoecker, 23 months ago

Yes, I know. But when I checked the code there was a way that this looped nevertheless and the loop went through this last line. So only replacing the variable by a lock probably wont help. There must be something else which is wrong (i.e. another place where the lock is missing :-)

comment:9 by taylor.smock, 23 months ago

Probably L285. Regardless, it shouldn't be an issue anymore, since I didn't do a straight replacement of the boolean. The code that causes the recursion performs a lock -- the other locks are there to avoid

            if (visible && !this.finishedAddingButtons.isLocked()) {
                this.finishedAddingButtons.lock();
                try {
                    // Actual logic
                } finally {
                    this.finishedAddingButtons.unlock();
                }

Usages of the problematic setVisible in our code:

  • L285 (selected.setVisible(selected.isVisible())) -- this should only be called when there are no locks present, and is supposed to ensure that the imgDisplay has the correct parent (since we currently only have one for memory reasons).
  • L349 (this.getImageTabs().forEach(m -> m.setVisible(m.isVisible()))) -- this is also supposed to be called after construction is finished (no locks present).

With that said, I'll look through the JDK code to see if there is an event fired that we can listen for.

comment:10 by stoecker, 23 months ago

Shouldn't...

print("This line should never be reached\n");

...
This line should never be reached
...

Aaah. Why? ;-)

by taylor.smock, 23 months ago

Attachment: 22727.2.patch added

Move title and imgDisplay reparenting code into its own method (from setVisible) and call that method when the selection model for the JTabbedPane changes

in reply to:  10 comment:11 by taylor.smock, 23 months ago

Replying to stoecker:

Shouldn't...

print("This line should never be reached\n");

...
This line should never be reached
...

Aaah. Why? ;-)

I feel like I'm missing something here. I've made similar comments elsewhere when all other cases are exhausted, or an Exception cannot be thrown (example: try {new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8)).close();} catch (IOException impossible) { throw new JosmRuntimeException(impossible); /* This should never be hit */ }).

Last edited 23 months ago by taylor.smock (previous) (diff)

comment:12 by stoecker, 23 months ago

Well, I came across a lot of software where the logs contained such and similar lines :-) The unthinkable nevertheless happened.

From review perspective this patch looks much cleaner...

in reply to:  12 comment:13 by taylor.smock, 23 months ago

Replying to stoecker:

Well, I came across a lot of software where the logs contained such and similar lines :-) The unthinkable nevertheless happened.

IMO, if it should never be hit, either throw an exception or comment why (example: Assertions.fail("This throws an exception"); print("This line should never be reached since the previous line throws an exception");).

With that said, I've seen less useful print statements. Like print("HELLO") (from a debugging session someone else was doing).

From review perspective this patch looks much cleaner...

I agree. I don't remember if I did some debugging to figure out what was called when, but I probably either picked the wrong method to watch or picked the wrong time to watch (e.g. construction versus mouse click on button).

comment:14 by taylor.smock, 22 months ago

Resolution: fixed
Status: newclosed

In 18705/josm:

Fix #22727: SOE in ImageViewerDialog#addButtonsForImageLayers

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain team.
as The resolution will be set.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences .
 
Note: See TracTickets for help on using tickets.