Schließen ich die xchart Bibliothek für Java und bin mit Ich erstelle ein Diagramm wie folgt:Schließen Prevent ganze JVM wenn xchart Diagramm
XYChart chartHR = QuickChart.getChart("Title", "Time", "y", "randomWalk", new double[] { 0 }, new double[] { 0 });
chartHR.getStyler().setLegendVisible(false);
chartHR.getStyler().setXAxisTicksVisible(false);
SwingWrapper<XYChart> swHR = new SwingWrapper<XYChart>(chartHR);
swHR.displayChart().setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
ich diese Grafik in einem von meinem Haupt-gestartete Thread zu schaffen Klasse. Jedes Mal, wenn ich das Diagramm schließe, ist meine gesamte Bewerbung geschlossen. Wie kann ich das verhindern?
Hier ist das minimale Arbeitsbeispiel:
package test;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
TestThread testThread = new TestThread();
testThread.start();
String input = "";
Scanner scanner = new Scanner(System.in);
while (!input.equals("q")) {
System.out.print("Enter 'q' for termination.");
input = scanner.nextLine();
}
scanner.close();
}
}
package test;
import javax.swing.JFrame;
import org.knowm.xchart.QuickChart;
import org.knowm.xchart.SwingWrapper;
import org.knowm.xchart.XYChart;
public class TestThread extends Thread {
private SwingWrapper<XYChart> swHR;
private XYChart chartHR;
public void run() {
chartHR = QuickChart.getChart("Test", "Time", "y", "randomWalk", new double[] { 0 }, new double[] { 0 });
chartHR.getStyler().setLegendVisible(false);
chartHR.getStyler().setXAxisTicksVisible(false);
swHR = new SwingWrapper<XYChart>(chartHR);
swHR.displayChart().setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
while(true) {}
}
}
Stellen Sie sicher, dass alle Threads nicht nur fertig sind, vielleicht? Sie sollten einen [MCVE] – pvg
@pvg posten Ich habe ein Beispiel hinzugefügt – machinery
Sie sollten dies lesen https://docs.oracle.com/javase/tutorial/uiswing/concurrency/ Sie brauchen den zusätzlichen Thread nicht zu beginnen (Im Allgemeinen sollten Sie Thread nicht von der Unterklasse ableiten und Sie sollten Ihre GUI-Einrichtung über den Ereignisversand-Thread durchführen. Dies ist, was die Diagrammbibliothek tut, aber Sie nicht. Sie landen in einem Race-Zustand, in dem Ihre Änderung vor der Änderung 'displayChart' stattfindet. – pvg