diff --git a/pom.xml b/pom.xml index 4a00c145..035b5a41 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 org.pamguard Pamguard - 2.02.06 + 2.02.06a Pamguard Java12+ Pamguard for Java 12+, using Maven to control dependcies www.pamguard.org diff --git a/src/Acquisition/FileInputSystem.java b/src/Acquisition/FileInputSystem.java index 31af5a84..1b15482f 100644 --- a/src/Acquisition/FileInputSystem.java +++ b/src/Acquisition/FileInputSystem.java @@ -167,6 +167,8 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe private SudListener sudListener; + private boolean fullyStopped; + public FileInputSystem(AcquisitionControl acquisitionControl) { this.acquisitionControl = acquisitionControl; PamSettingManager.getInstance().registerSettings(this); @@ -738,6 +740,8 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe if (audioStream == null) return false; dontStop = true; + + fullyStopped = false; theThread.start(); @@ -780,6 +784,9 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe } public void systemHasStopped(boolean wasRunning) { + if (fullyStopped) { + return; + } long stopTime = System.currentTimeMillis(); if (getCurrentFile() == null) { return; @@ -788,6 +795,7 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe double analSecs = (stopTime - fileStartTime) / 1000.; System.out.println(String.format("File %s, SR=%dHz, length=%3.1fs took %3.1fs = %3.1fx real time", getCurrentFile().getName(), (int)getSampleRate(), fileSecs, analSecs, fileSecs / analSecs)); + fullyStopped = true; } /** @@ -933,7 +941,7 @@ public class FileInputSystem extends DaqSystem implements ActionListener, PamSe * PamDataUnits from them. Once a unit is created, tell this thread * to wait until it has been used by the main thread. */ - System.out.println("File system start processing"); +// System.out.println("File system start processing"); /* * File should have been opened in the constructor so just read it * in in chunks and pass to datablock diff --git a/src/Acquisition/FolderInputSystem.java b/src/Acquisition/FolderInputSystem.java index 589b6c45..92ee94d7 100644 --- a/src/Acquisition/FolderInputSystem.java +++ b/src/Acquisition/FolderInputSystem.java @@ -150,7 +150,7 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{ public void actionPerformed(ActionEvent e) { - System.out.println("Restart later time action"); +// System.out.println("Restart later time action"); newFileTimer.stop(); PamController.getInstance().startLater(false); //don't save settings on restarts @@ -655,7 +655,7 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{ if (currentFile < allFiles.size()) { // only restart if the file ended - not if it stopped if (getStreamStatus() == STREAM_ENDED) { - System.out.println(String.format("Start new file timer (file %d/%d)",currentFile+1,allFiles.size())); +// System.out.println(String.format("Start new file timer (file %d/%d)",currentFile+1,allFiles.size())); newFileTimer.start(); } } @@ -778,7 +778,7 @@ public class FolderInputSystem extends FileInputSystem implements PamSettings{ @Override public boolean startSystem(AcquisitionControl daqControl) { - System.out.println("Start system"); +// System.out.println("Start system"); setFolderProgress(); return super.startSystem(daqControl); } diff --git a/src/IshmaelDetector/EnergySumProcess.java b/src/IshmaelDetector/EnergySumProcess.java index 0aa1b990..bec3dfb7 100644 --- a/src/IshmaelDetector/EnergySumProcess.java +++ b/src/IshmaelDetector/EnergySumProcess.java @@ -79,8 +79,9 @@ public class EnergySumProcess extends IshDetFnProcess { EnergySumParams p = (EnergySumParams)ishDetControl.ishDetParams; PamDataBlock inputDataBlock = getInputDataBlock(); //might be null - if (inputDataBlock != null && inputDataBlock.getUnitsCount() > 0) { - savedGramHeight = ((FFTDataUnit)inputDataBlock.getLastUnit()).getFftData().length(); + FFTDataUnit lastFFTUnit = ((FFTDataUnit)inputDataBlock.getLastUnit()); + if (lastFFTUnit != null) { + savedGramHeight = lastFFTUnit.getFftData().length(); int len = savedGramHeight; //Should be max(1,...) here, but FFT bin 0 has 0's in it. loBin = Math.max(1, (int) Math.floor(len * p.f0 / (sampleRate/2))); diff --git a/src/IshmaelDetector/SgramCorrProcess.java b/src/IshmaelDetector/SgramCorrProcess.java index 0be85eea..fe7de69a 100644 --- a/src/IshmaelDetector/SgramCorrProcess.java +++ b/src/IshmaelDetector/SgramCorrProcess.java @@ -83,9 +83,14 @@ public class SgramCorrProcess extends IshDetFnProcess protected void prepareMyParams() { SgramCorrParams p = (SgramCorrParams)ishDetControl.ishDetParams; PamDataBlock inputDataBlock = getInputDataBlock(); - - if (inputDataBlock != null && inputDataBlock.getUnitsCount() > 0) { - savedGramHeight = ((FFTDataUnit)inputDataBlock.getLastUnit()).getFftData().length(); + /* + * get the unit. first, then check it's null. Due to multithreading it's + * possible that checking there are units and then asking for one,without + * synchronization will crash if the unit is deleted between those two calls. + */ + FFTDataUnit lastFFTUnit = ((FFTDataUnit)inputDataBlock.getLastUnit()); + if (lastFFTUnit != null) { + savedGramHeight = lastFFTUnit.getFftData().length(); /* * fft information is now stored in an FFTDataBLock, so no need to get * back to the process above it. diff --git a/src/Map/MapParametersDialog.java b/src/Map/MapParametersDialog.java index ec6a5d15..03d77300 100644 --- a/src/Map/MapParametersDialog.java +++ b/src/Map/MapParametersDialog.java @@ -63,7 +63,7 @@ public class MapParametersDialog extends PamDialog { private JCheckBox headingUp = new JCheckBox("Ship heading always up"); - private JCheckBox showSurface = new JCheckBox("Show sea sueface"); + private JCheckBox showSurface = new JCheckBox("Show sea surface"); private MapFileManager mapFileManager; @@ -261,7 +261,7 @@ public class MapParametersDialog extends PamDialog { public HydrophonePanel() { super(); - setBorder(new TitledBorder("Hydropone Options")); + setBorder(new TitledBorder("Hydrophone Options")); setLayout(new GridBagLayout()); GridBagConstraints c = new PamGridBagContraints(); c.gridx = 0; @@ -272,7 +272,7 @@ public class MapParametersDialog extends PamDialog { addComponent(this, colourByChannel, c); c.gridy++; c.gridwidth = 1; - addComponent(this, new JLabel("Symbox size ", JLabel.RIGHT), c); + addComponent(this, new JLabel("Symbol size ", JLabel.RIGHT), c); c.gridx++; symbolSize = new SpinnerNumberModel(Hydrophone.DefaultSymbolSize, 4, 30, 2); addComponent(this, symbolSizeSpinner = new JSpinner(symbolSize), c); diff --git a/src/PamController/PamController.java b/src/PamController/PamController.java index af85a10d..f731b064 100644 --- a/src/PamController/PamController.java +++ b/src/PamController/PamController.java @@ -1225,8 +1225,9 @@ public class PamController implements PamControllerInterface, PamSettings { if (PamCalendar.isSoundFile() == false) { PamCalendar.setSessionStartTime(PamCalendar.getTimeInMillis()); } - - System.out.printf("PAMGUARD Startup took %d milliseconds at time %s\n", startDelay, PamCalendar.formatDateTime(PamCalendar.getSessionStartTime())); + if (PamCalendar.isSoundFile() == false) { + System.out.printf("PAMGUARD Startup took %d milliseconds at time %s\n", startDelay, PamCalendar.formatDateTime(PamCalendar.getSessionStartTime())); + } guiFrameManager.pamStarted(); return true; diff --git a/src/PamController/PamguardVersionInfo.java b/src/PamController/PamguardVersionInfo.java index 68b68f42..47692579 100644 --- a/src/PamController/PamguardVersionInfo.java +++ b/src/PamController/PamguardVersionInfo.java @@ -31,7 +31,7 @@ public class PamguardVersionInfo { * Version number, major version.minorversion.sub-release. * Note: can't go higher than sub-release 'f' */ - static public final String version = "2.02.06"; + static public final String version = "2.02.06a"; /** * Release date diff --git a/src/PamController/SettingsFileDialog.java b/src/PamController/SettingsFileDialog.java index 8619b8f6..73fab149 100644 --- a/src/PamController/SettingsFileDialog.java +++ b/src/PamController/SettingsFileDialog.java @@ -63,6 +63,7 @@ public class SettingsFileDialog extends PamDialog { pan.add(BorderLayout.CENTER, p); pan.add(BorderLayout.SOUTH, q); + setMoveToMouse(false); setDialogComponent(pan); } diff --git a/src/PamView/PamObjectViewer.java b/src/PamView/PamObjectViewer.java index 8a2c36be..2801162b 100644 --- a/src/PamView/PamObjectViewer.java +++ b/src/PamView/PamObjectViewer.java @@ -37,6 +37,7 @@ import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextField; +import javax.swing.SwingUtilities; import javax.swing.Timer; import javax.swing.WindowConstants; @@ -882,6 +883,7 @@ public class PamObjectViewer implements PamViewInterface, ComponentListener, blockTimer.start(); setVisible(true); + } @@ -1005,6 +1007,22 @@ public class PamObjectViewer implements PamViewInterface, ComponentListener, return null; } + @Override + public void setVisible(boolean vis) { + if (vis) { + SwingUtilities.invokeLater(new Runnable() { + /** + * This seems to work and resize the text fields on high def displays. + */ + @Override + public void run() { + pack(); + } + }); + } + super.setVisible(vis); + } + void fillPanelContent() { p.removeAll(); GridBagLayout layout = new GridBagLayout(); diff --git a/src/PamView/dialog/PamDialog.java b/src/PamView/dialog/PamDialog.java index e3c94234..64e7b5f1 100644 --- a/src/PamView/dialog/PamDialog.java +++ b/src/PamView/dialog/PamDialog.java @@ -64,6 +64,10 @@ abstract public class PamDialog extends JDialog { private boolean warnDefaultSetting = true; private CancelObserver cancelObserver; private boolean firstShowing = true; +/* + * Move to mouse position is parent is null + */ + private boolean moveToMouse = true; public JPanel getButtonPanel() { return buttonPanel; @@ -281,7 +285,7 @@ abstract public class PamDialog extends JDialog { synchronized (this) { PamColors.getInstance().notifyContianer(this.getContentPane()); } - if (getOwner() == null) { + if (getOwner() == null && isMoveToMouse()) { moveToMouseLocation(); } if (firstShowing) { @@ -691,4 +695,18 @@ abstract public class PamDialog extends JDialog { } } + /** + * @return the moveToMouse + */ + public boolean isMoveToMouse() { + return moveToMouse; + } + + /** + * @param moveToMouse the moveToMouse to set + */ + public void setMoveToMouse(boolean moveToMouse) { + this.moveToMouse = moveToMouse; + } + } diff --git a/src/generalDatabase/DBSchemaWriter.java b/src/generalDatabase/DBSchemaWriter.java index 746516b4..f602ad5c 100644 --- a/src/generalDatabase/DBSchemaWriter.java +++ b/src/generalDatabase/DBSchemaWriter.java @@ -6,8 +6,6 @@ import java.sql.Types; import java.util.ArrayList; import java.util.List; -import javax.xml.parsers.DocumentBuilderFactory; - import org.w3c.dom.Document; import org.w3c.dom.Element;