From bfd145cff3f51070ed8cc39646521b19cbb185fe Mon Sep 17 00:00:00 2001 From: "Loch Christian (uib05376)" Date: Sat, 14 Nov 2020 23:28:51 +0100 Subject: [PATCH] Fixed null pointer exception after changing frameskip --- .../java/de/hems/trafficsim/MainActivity.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/de/hems/trafficsim/MainActivity.java b/app/src/main/java/de/hems/trafficsim/MainActivity.java index 66800ae..1fda53f 100644 --- a/app/src/main/java/de/hems/trafficsim/MainActivity.java +++ b/app/src/main/java/de/hems/trafficsim/MainActivity.java @@ -175,15 +175,25 @@ public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBar float newMaxVelocity = ((SeekBar) findViewById(R.id.maxVelocitySeekBar)).getProgress(); SeekBar brakeProbabilitySeekBar = (SeekBar) findViewById(R.id.brakeProbabilitySeekBar); - float newBrakeProb = (float)brakeProbabilitySeekBar.getProgress() / (float)brakeProbabilitySeekBar.getMax(); + float newBrakeProb = (float)brakeProbabilitySeekBar.getProgress() + / (float)brakeProbabilitySeekBar.getMax(); int newDelay = ((SeekBar)(findViewById(R.id.simDelaySeekBar))).getProgress(); int newFrameskip = ((SeekBar)(findViewById(R.id.frameskipSeekBar))).getProgress(); - this.track = new Track(newNoOfVehicles, newTrackLength, newBrakeProb, newMaxVelocity, newDelay, defaultHistoryLength); + boolean wasRunning = this.worker != null; + if (wasRunning) { + this.worker.setStop(true); + try { + this.worker.join(); + } catch (InterruptedException ex) { } + } + + this.track = new Track(newNoOfVehicles, newTrackLength, newBrakeProb, newMaxVelocity, + newDelay, defaultHistoryLength); this.renderer.setTrack(this.track); - if (this.worker != null) { // There was a simulation running already - this.stopWorker(); + + if (wasRunning) { this.worker = new Worker(track, this, renderer, newFrameskip); this.worker.start(); } @@ -211,7 +221,9 @@ public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBar } else if (seekBar == (SeekBar)(findViewById(R.id.frameskipSeekBar))) { TextView tv = (TextView)(findViewById(R.id.frameSkipTextView)); tv.setText(String.valueOf(seekBar.getProgress())); - this.worker.setFrameskip(seekBar.getProgress()); + if (this.worker != null) { + this.worker.setFrameskip(seekBar.getProgress()); + } } }