Modify

Opened 6 months ago

Closed 6 months ago

#16660 closed defect (fixed)

AIOOBE at MenuScroller.computeScrollCount

Reported by: pauladriannem@… Owned by: team
Priority: normal Milestone: 18.09
Component: Core Version: latest
Keywords: template_report Cc:

Description

What steps will reproduce the problem?

  1. Download any map data without any editing work
  2. Open both Bing and DigitalGlobe imagery
  3. Click/Tap the File > Save As

What is the expected result?

The OSM file should be saved normally and continue editing

What happens instead?

Unknown error has occurred and the window doesn't open the File menu until fully restarted the JOSM

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

Relative:URL: ^/trunk
Repository:UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Last:Changed Date: 2018-08-18 16:16:51 +0200 (Sat, 18 Aug 2018)
Revision:14163
Build-Date:2018-08-18 16:30:21
URL:https://josm.openstreetmap.de/svn/trunk

Identification: JOSM/1.5 (14163 en) Windows 10 64-Bit
OS Build number: Windows 10 Home Single Language 1803 (17713)
Memory Usage: 256 MB / 2048 MB (39 MB allocated, but free)
Java version: 10.0.2+13, Oracle Corporation, Java HotSpot(TM) 64-Bit Server VM
Screen: \Display0 1366x768
Maximum Screen Size: 1366x768
Dataset consistency test: No problems found

Plugins:
+ BuildingGeneralization (23)
+ ColorPlugin (1511895663)
+ CustomizePublicTransportStop (34501)
+ ElevationProfile (34576)
+ ImproveWay (1529701520)
+ Mapillary (v1.5.15)
+ MicrosoftStreetside (34577)
+ OpenStreetCam (160)
+ OpeningHoursEditor (34535)
+ RoadSigns (34553)
+ TombPlugin (56)
+ alignways (34489)
+ apache-commons (34506)
+ apache-http (34506)
+ areaselector (349)
+ austriaaddresshelper (1525848529)
+ auto_tools (1529260859)
+ buildings_tools (34572)
+ changeset-viewer (15)
+ continuosDownload (1530471163)
+ ejml (34389)
+ imagery_offset_db (34506)
+ indoor_sweepline (34521)
+ indoorhelper (34522)
+ jna (34492)
+ livegps (34526)
+ log4j (34527)
+ merge-overlap (34530)
+ michigan_left (34531)
+ print (34576)
+ public_transport (34548)
+ public_transport_layer (34549)
+ reverter (34552)
+ rex (1529698495)
+ routing (34554)
+ surveyor (34558)
+ tageditor (34560)
+ terracer (34562)
+ turnlanes (34566)
+ turnlanes-tagging (272)
+ turnrestrictions (34576)
+ undelete (34568)
+ utilsplugin2 (34506)
+ wikipedia (v1.1.0)

Map paint styles:
+ <josm.pref>\styles\sit.mapcss

Validator rules:
+ <josm.pref>\validator\indoorhelper.validator.mapcss

Last errors/warnings:
- W: java.io.IOException: Attribution is not loaded yet
- W: java.io.IOException: Attribution is not loaded yet
- E: Handled by bug report queue: java.lang.ArrayIndexOutOfBoundsException: 99
- E: Handled by bug report queue: java.lang.ArrayIndexOutOfBoundsException: 103
- E: Handled by bug report queue: java.lang.ArrayIndexOutOfBoundsException: 106
- E: Handled by bug report queue: java.lang.ArrayIndexOutOfBoundsException: 109
- E: Handled by bug report queue: java.lang.ArrayIndexOutOfBoundsException: 110
- E: Handled by bug report queue: java.lang.ArrayIndexOutOfBoundsException: 111
- E: Handled by bug report queue: java.lang.ArrayIndexOutOfBoundsException: 112
- E: Handled by bug report queue: java.lang.ArrayIndexOutOfBoundsException: 112


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

Warning issued by: BugReportExceptionHandler#handleException

=== STACK TRACE ===
Thread: AWT-EventQueue-0 (21) of main
java.lang.ArrayIndexOutOfBoundsException: 99
	at org.openstreetmap.josm.gui.MenuScroller.computeScrollCount(MenuScroller.java:88)
	at org.openstreetmap.josm.gui.MenuScroller.refreshMenu(MenuScroller.java:319)
	at org.openstreetmap.josm.gui.MenuScroller.access$400(MenuScroller.java:41)
	at org.openstreetmap.josm.gui.MenuScroller$MouseScrollListener.mouseWheelMoved(MenuScroller.java:464)
	at java.desktop/java.awt.Component.processMouseWheelEvent(Unknown Source)
	at java.desktop/java.awt.Component.processEvent(Unknown Source)
	at java.desktop/java.awt.Container.processEvent(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventToSelf(Unknown Source)
	at java.desktop/java.awt.Component.dispatchMouseWheelToAncestor(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.Component.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.desktop/java.awt.EventQueue.access$600(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$4.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.desktop/java.awt.EventQueue$5.run(Unknown Source)
	at java.base/java.security.AccessController.doPrivileged(Native Method)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.desktop/java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.desktop/java.awt.EventDispatchThread.run(Unknown Source)

=== RUNNING THREADS ===
Thread: File Watcher (14) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingDeque.takeFirst(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingDeque.take(Unknown Source)
java.base@10.0.2/sun.nio.fs.AbstractWatchService.take(Unknown Source)
app//org.openstreetmap.josm.io.FileWatcher.processEvents(FileWatcher.java:120)
app//org.openstreetmap.josm.io.FileWatcher$$Lambda$33/1902260856.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Weak reference cleaner (26) of main
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
app//org.openstreetmap.josm.tools.ListenableWeakReference.clean(ListenableWeakReference.java:60)
app//org.openstreetmap.josm.tools.ListenableWeakReference$$Lambda$338/467313213.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Timer-0 (36) of main
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.Object.wait(Unknown Source)
java.base@10.0.2/java.util.TimerThread.mainLoop(Unknown Source)
java.base@10.0.2/java.util.TimerThread.run(Unknown Source)

Thread: QuantumRenderer-0 (114) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
platform/javafx.graphics@10.0.2/com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Common-Cleaner (11) of InnocuousThreadGroup
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.base@10.0.2/jdk.internal.ref.CleanerImpl.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)
java.base@10.0.2/jdk.internal.misc.InnocuousThread.run(Unknown Source)

Thread: DestroyJavaVM (44) of main

Thread: JavaFX Application Thread (118) of main
platform/javafx.graphics@10.0.2/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
platform/javafx.graphics@10.0.2/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
platform/javafx.graphics@10.0.2/com.sun.glass.ui.win.WinApplication$$Lambda$834/354118173.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: ForkJoinPool.commonPool-worker-4 (239) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: AWT-Shutdown (22) of system
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.Object.wait(Unknown Source)
java.desktop@10.0.2/sun.awt.AWTAutoShutdown.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: ForkJoinPool.commonPool-worker-7 (333) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.parkUntil(Unknown Source)
java.base@10.0.2/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: message-notifier-0 (43) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
java.base@10.0.2/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
java.base@10.0.2/java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Finalizer (3) of system
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.base@10.0.2/java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)

Thread: InvokeLaterDispatcher (117) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingDeque.takeFirst(Unknown Source)
platform/javafx.graphics@10.0.2/com.sun.glass.ui.InvokeLaterDispatcher.run(Unknown Source)

Thread: Map Status Collector (105) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
app//org.openstreetmap.josm.gui.MapStatus$Collector.run(MapStatus.java:434)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: AWT-EventQueue-0 (21) of main
Stacktrace see above.

Thread: TimerQueue (23) of system
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.parkNanos(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(Unknown Source)
java.base@10.0.2/java.util.concurrent.DelayQueue.take(Unknown Source)
java.desktop@10.0.2/javax.swing.TimerQueue.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Java2D Disposer (16) of system
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.desktop@10.0.2/sun.java2d.Disposer.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Cleaner-0 (124) of InnocuousThreadGroup
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.base@10.0.2/jdk.internal.ref.CleanerImpl.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)
java.base@10.0.2/jdk.internal.misc.InnocuousThread.run(Unknown Source)

Thread: Attach Listener (5) of system

Thread: AWT-Windows (19) of system
java.desktop@10.0.2/sun.awt.windows.WToolkit.eventLoop(Native Method)
java.desktop@10.0.2/sun.awt.windows.WToolkit.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Swing-Shell (326) of system
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.desktop@10.0.2/sun.awt.shell.Win32ShellFolderManager2$ComInvoker$1.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Timer-1 (38) of main
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.util.TimerThread.mainLoop(Unknown Source)
java.base@10.0.2/java.util.TimerThread.run(Unknown Source)

Thread: Timer-4 (103) of main
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.Object.wait(Unknown Source)
java.base@10.0.2/java.util.TimerThread.mainLoop(Unknown Source)
java.base@10.0.2/java.util.TimerThread.run(Unknown Source)

Thread: Timer-3 (54) of main
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.Object.wait(Unknown Source)
java.base@10.0.2/java.util.TimerThread.mainLoop(Unknown Source)
java.base@10.0.2/java.util.TimerThread.run(Unknown Source)

Thread: pool-1-thread-1 (110) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: main-worker-0 (99) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: JCS-ElementEventQueue-Thread-1 (33) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
java.base@10.0.2/java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: styled-map-renderer-5 (238) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.park(Unknown Source)
java.base@10.0.2/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: ForkJoinPool.commonPool-worker-6 (332) of main
java.base@10.0.2/jdk.internal.misc.Unsafe.park(Native Method)
java.base@10.0.2/java.util.concurrent.locks.LockSupport.parkUntil(Unknown Source)
java.base@10.0.2/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
java.base@10.0.2/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)

Thread: Signal Dispatcher (4) of system

Thread: Prism Font Disposer (123) of system
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
java.base@10.0.2/java.lang.ref.ReferenceQueue.remove(Unknown Source)
platform/javafx.graphics@10.0.2/com.sun.javafx.font.Disposer.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: FileSystemWatchService (13) of main
java.base@10.0.2/sun.nio.fs.WindowsNativeDispatcher.GetQueuedCompletionStatus0(Native Method)
java.base@10.0.2/sun.nio.fs.WindowsNativeDispatcher.GetQueuedCompletionStatus(Unknown Source)
java.base@10.0.2/sun.nio.fs.WindowsWatchService$Poller.run(Unknown Source)
java.base@10.0.2/java.lang.Thread.run(Unknown Source)

Thread: Reference Handler (2) of system
java.base@10.0.2/java.lang.ref.Reference.waitForReferencePendingList(Native Method)
java.base@10.0.2/java.lang.ref.Reference.processPendingReferences(Unknown Source)
java.base@10.0.2/java.lang.ref.Reference.access$000(Unknown Source)
java.base@10.0.2/java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)

Thread: Timer-2 (40) of main
java.base@10.0.2/java.lang.Object.wait(Native Method)
java.base@10.0.2/java.util.TimerThread.mainLoop(Unknown Source)
java.base@10.0.2/java.util.TimerThread.run(Unknown Source)

Thread: Thread-10 (119) of main

Attachments (0)

Change History (2)

comment:1 Changed 6 months ago by Don-vip

Milestone: 19.0318.09
Summary: Unknown bug after saving OSM file into local computerAIOOBE at MenuScroller.computeScrollCount

comment:2 Changed 6 months ago by Don-vip

Resolution: fixed
Status: newclosed

In 14173/josm:

fix #16660 - ArrayIndexOutOfBoundsException in MenuScroller

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.

Add Comment


E-mail address and name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.