나는이 문제에 직면하고있다, 나는메인 UI가 자식 스레드로부터 붕괴하는 것을 방지하십시오.
class FinalUI1 extends javax.swing.JFrame
{
//do something
Thread t;
try {
t = new Thread(new PcapTool(null));
t.start();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// do something
}
class PcapTool extends ApplicationFrame implements Runnable
{
//do something
public void run() {
Display Graph based on above classes input
}
}
사용자가 버튼을 클릭 할 때마다 메인 UI 창과 별도의 창에서 새로운 그래프가 생성된다.
문제 : FinalUI1 클래스에서 사용자가 단추를 클릭 할 때 그래프를 표시하고 싶지만 생성 된 그래프를 닫으면 전체 UI가 축소되어 모든 것이 사라집니다. 기본 UI를 유지하고 사용자가 닫으려고 선택한 특정 그래프를 종료하고 싶습니다. UI가 메인 스레드에 있고 새 스레드에서 새 그래프를 생성 할 수 있기 때문에이 작업을 수행하고 자식 스레드를 닫으면 기본 UI가 계속 실행되어야한다는 사실이 내 마음에 들었습니다. 이걸 좀 도와 주실 래요?대단히 감사합니다.
추가 코드 :
public class PcapTool extends ApplicationFrame {
public static String domainChoice, domainConcatenate="";;
public static XYSeries series1;
public static XYSeriesCollection dataset=null;
public static XYSeries series2;
public static PacketInfo resPacketObject;
public static Hashtable<String, Object> DomainNameTable=new Hashtable<String, Object>();
public static String[] hasArray=new String[100];
public static JFreeChart chart;
public static String customTitle = " ";
public ArrayList<Double> dataNumberList=new ArrayList<Double>();
public static String[]dataUsage;
public static String[]timeArrival,txRxTag;
private static final long serialVersionUID = 1L;
public PcapTool(final String title) throws InterruptedException {
super(title);
IntervalXYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(2000,1000));//(width,height) of display
setContentPane(chartPanel);
}
public IntervalXYDataset createDataset() throws InterruptedException {
// add Series 1 and Series 2
}
dataset= new XYSeriesCollection(series1);
dataset.addSeries(series2);
dataset.setIntervalWidth(0.05);//set width here
return dataset;
}
private JFreeChart createChart(IntervalXYDataset dataset) {
final JFreeChart chart = ChartFactory.createXYBarChart(
"Pcap Analysis Tool\n Domain: "+domainConcatenate,
"Time (Seconds)",
false,
"Data Usage (bytes)",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
return chart;
}
public static void main(final String[] args) throws InterruptedException {
final PcapTool demo = new PcapTool("PCAP Analysis");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
System.out.println("domain: "+dropBoxUserValue);
}
Jfree 차트를 구현하고 있으며이 클래스에 그래프를 그리기 때문에 JDialog를 사용할 수 없습니다. 위의 편집 된 질문에서 내 코드를 참조하십시오. 도와 주셔서 감사합니다. –
@helloMaga : JDialog를 사용할 수 없다는 것에 대한 진술을 이해할 수 없습니다. 당신이 주신 이유는 JDialog 사용에 대한 금기 사항이 아니며, 물론 JDialog가 JFrame만큼 복잡한 GUI를 유지할 수 있다는 것을 알고 있습니까? 또한 게시 한 코드에 관해서는 불필요하고 실제로는 부적절한 정적 필드가 많이 있습니다. –
감사합니다. 필드는 위의 코드에 표시되지 않은 데이터를 참조하기위한 것이지만 JDialog에 표시하기 위해 생성 된 그래프/시리즈를 표시하는 방법을 잘 모르는 경우이 질문의 목적에 부합합니다. 간단히 말해, 생성 된 그래프를 J 대화 상자에 임베드하는 방법을 모르겠습니다. –