Hi,
ich hab folgendes Szenario. In meinem Programm gibt es zwei Tabs. Tab A stellt ein Signal dar, in Tab B wird ein Chronospektrum des Signals angezeigt (FFT). Soblad sich das Signal ändert (z.B. weiterscrollen in der Zeitachse) werden beide Tabs neu gezeichnet. Da die FFT einige Sekunde zur Berechnung braucht, hab ich sie in einen eigenen Thread ausgelagert, was auch wie erwartet im Hintergrund mein Tab B updatet. Das Problem dabei ist nur, das bis der Thread fertig ist, meine AWT-Darstellung des Signals mit Artefaktenuebersät wird. Ohne langwierige FFT-Berechnung sieht man das Problem natuerlich nicht. Ich weis nicht woher dieses Verhalten stammt....
Hier mal der Code:
und hier die run methode von FFT3D:
Ich hab noch zwei Scrrenshots angehängt. Das erste bild zeigt die Ausgabe wie sie sein sollte und auch ist , nachdem die FFT fertig ist. Das zweite Bild zeigt das Signal wie es aussieht, während der andere Thread die FFt prozessiert. (Zum Teil gibt es noch mehr dieser rechteckigen Ausreisser )
Viele Grüsse
jface
ich hab folgendes Szenario. In meinem Programm gibt es zwei Tabs. Tab A stellt ein Signal dar, in Tab B wird ein Chronospektrum des Signals angezeigt (FFT). Soblad sich das Signal ändert (z.B. weiterscrollen in der Zeitachse) werden beide Tabs neu gezeichnet. Da die FFT einige Sekunde zur Berechnung braucht, hab ich sie in einen eigenen Thread ausgelagert, was auch wie erwartet im Hintergrund mein Tab B updatet. Das Problem dabei ist nur, das bis der Thread fertig ist, meine AWT-Darstellung des Signals mit Artefaktenuebersät wird. Ohne langwierige FFT-Berechnung sieht man das Problem natuerlich nicht. Ich weis nicht woher dieses Verhalten stammt....
Hier mal der Code:
Java:
public void displayedRecordModified() {
//Die Grafik im Tab A
polysomnograph.repaint();
// Grafik in Tab B
polysomnograph.repaint3D();
}
public void repaint3D(){
JPanel parent = (JPanel) this.mainWindow.jTabbedPane.getComponent(1);
if(fft3d == null)
fft3d = new FFT3D(graph,graph2, navigationSlider.getValue(),
getEpochDuration(),
(double) 0.0 ,
(double) 1.0, this,parent );
//else
fft3d.update(graph,graph2, navigationSlider.getValue(),
getEpochDuration(),
(double) 0.0 ,
(double) 1.0, this,parent );
Thread th = new Thread(fft3d);
th.start();
}
und hier die run methode von FFT3D:
Java:
public void run() {
parent.removeAll();
JPanel tmp = new JPanel(new FlowLayout(FlowLayout.CENTER));
tmp.add(new JLabel("FFT wird erstellt"));
parent.add(tmp,BorderLayout.CENTER);
generate3DFFLR(graph, graph2, startSecond, duration, startPosition, endPosition, polysomnograph);
parent.removeAll();
parent.add(fft3DArea,BorderLayout.CENTER);
parent.getParent().repaint();
}
Ich hab noch zwei Scrrenshots angehängt. Das erste bild zeigt die Ausgabe wie sie sein sollte und auch ist , nachdem die FFT fertig ist. Das zweite Bild zeigt das Signal wie es aussieht, während der andere Thread die FFt prozessiert. (Zum Teil gibt es noch mehr dieser rechteckigen Ausreisser )
Viele Grüsse
jface
Zuletzt bearbeitet: