SWT Display / Shell终止并重新显示

时间:2015-11-13 21:08:53

标签: java multithreading swt swtchart

我一直在尝试许多不同的事情来完成这项工作但却无法做到。它正在做的是:程序从STARTUP开始工作正常,等待用户输入和其他东西。然后它称之为:

new Coil_Testing(option);

这将我们的线程移动到一个新类(Coil_Testing)。在这个类中,它将运行测试,在设置我的设备并连接到它们之后,它将启动GUI(appChart)。这显示了测试进展时的实时信息图。测试将运行它的过程并按预期工作。在完成测试之后,我调用了chart.close(),这是我自己的方法,它应该但不清除图表的线程和/或内存。

因此,下次我在不终止程序的情况下运行测试时,在调用shell.open()时会给出一个Thread错误。

  

线程“Thread-2”中的异常java.lang.IllegalArgumentException:参数无效

我这样做是因为我通常有很多测试背对背排列,并且不需要一遍又一遍地重新打开程序。

“Shell Sleep”消息位于show()方法末尾的appChart中。

终端输出

<Blank Space>

===========CONTACTOR INFO==========
 1:                  Contactor: 700S-DCP71020Z24 E
 2:                  Date Code: 1423 (Jun 2 - Jun 8)
 3:                       Coil: PD714
 4:                    Voltage: 24VDC
 5:                      Hertz: DC
 6:           Contactor Number: TEST
 7:                    Comment: TEST
=============TEST SETUP===========
 8:               Voltage Type: DC
 9:           Number Of Cycles: 3
10:            Cycle Time (ms): 0
11:           Toggle Test Type: Cold
12:  Hot Coil Refresh Time (M): 5
13:               Toggle Email: FALSE
14:                     PLC IP: 192.168.1.10    Port: 502   
15:      Digital Multimeter IP: 192.168.1.12    Port: 5025  
16:             Ocilloscope IP: 192.168.1.13    Port: 5025  
17:     TEST DEVICE CONNECTIONS
18:                 SETUP EMAIL
19:            Folder Location: C:\Users\<NAME>\Documents\TEST RESULTS FOLDER\Coil Testing
99:                EXIT PROGRAM
Type 1 - 19 to edit or 0 to continue 0

<Blank Space>

Please check setup and unpause the test.
Max Current Found: 0.326633

Cycle 1 out of 3 ... Retries: 0
Scope Single Ready!
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Voltage: 24.3465642
Frequency: 0.0
Getting Oscilloscope Data
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Got 7680 of information per pole.
Now Analyzing Close Time and Bounce Time.
Close times: 55.83ms .. 55.73ms .. 55.57ms
Bounce times: 0.00ms .. 0.00ms .. 0.00ms
Max Current: 0.50A
Min Current: -0.03A
Seal Current: 0.47A
Form Factor: 1.00
Shell Sleep
Scope Single Ready!
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Open times: 13.96ms .. 14.43ms .. 14.79ms
Reading Resistance
Resistance: 50.31
Cycle Time: 8491



Cycle 2 out of 3 ... Retries: 0
Shell Sleep
Scope Single Ready!
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Voltage: 24.4384331
Frequency: 0.0
Getting Oscilloscope Data
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Got 7680 of information per pole.
Now Analyzing Close Time and Bounce Time.
Close times: 55.42ms .. 55.10ms .. 54.95ms
Bounce times: 0.00ms .. 0.10ms .. 0.05ms
Max Current: 0.50A
Min Current: -0.02A
Seal Current: 0.47A
Form Factor: 1.00
Scope Single Ready!
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Open times: 10.31ms .. 10.73ms .. 11.15ms
Reading Resistance
Resistance: 50.30
Cycle Time: 8493



Cycle 3 out of 3 ... Retries: 0
Scope Single Ready!
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Voltage: 24.3477854
Frequency: 0.0
Getting Oscilloscope Data
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Got 7680 of information per pole.
Now Analyzing Close Time and Bounce Time.
Close times: 55.99ms .. 55.78ms .. 55.52ms
Bounce times: 0.00ms .. 0.00ms .. 0.00ms
Max Current: 0.50A
Min Current: -0.02A
Seal Current: 0.47A
Form Factor: 1.00
Scope Single Ready!
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Open times: 10.05ms .. 10.47ms .. 10.94ms
Reading Resistance
Shell Sleep
Resistance: 50.36
Cycle Time: 8288


Saving output file to C:\Users\<NAME>\Documents\TEST RESULTS FOLDER\Coil Testing\11-13-2015_14-29-15.xlsx
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Shell Sleep
Writing to INFORMATION
Writing CycleNum to each sheets.
Writing to CLOSE TIME
    L1
    L2
    L3
Writing to BOUNCE TIME
    L1
    L2
    L3
Writing to OPEN TIME
    L1
    L2
    L3
Writing to CURRENT
Writing to COIL INFO
    Resistance
    Voltage
Writing to RETRY SHEET
Shell Sleep
Shell Sleep

<Blank Space>

Shell Sleep
===========CONTACTOR INFO==========
 1:                  Contactor: 700S-DCP71020Z24 E
 2:                  Date Code: 1423 (Jun 2 - Jun 8)
 3:                       Coil: PD714
 4:                    Voltage: 24VDC
 5:                      Hertz: DC
 6:           Contactor Number: TEST
 7:                    Comment: TEST
=============TEST SETUP===========
 8:               Voltage Type: DC
 9:           Number Of Cycles: 3
10:            Cycle Time (ms): 0
11:           Toggle Test Type: Cold
12:  Hot Coil Refresh Time (M): 5
13:               Toggle Email: FALSE
14:                     PLC IP: 192.168.1.10    Port: 502   Valid
15:      Digital Multimeter IP: 192.168.1.12    Port: 5025  Valid
16:             Ocilloscope IP: 192.168.1.13    Port: 5025  Valid
17:     TEST DEVICE CONNECTIONS
18:                 SETUP EMAIL
19:            Folder Location: C:\Users\<Name>\Documents\TEST RESULTS FOLDER\Coil Testing
99:                EXIT PROGRAM
Type 1 - 19 to edit or 0 to continue Shell Sleep
Shell Sleep
Shell Sleep
0

<Blank Space>

Please check setup and unpause the test.
Max Current Found: 0.326633

Cycle 1 out of 3 ... Retries: 0
Exception in thread "Thread-2" java.lang.IllegalArgumentException: Argument not valid
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.SWT.error(Unknown Source)
    at org.eclipse.swt.graphics.GC.setFont(Unknown Source)
    at org.swtchart.internal.axis.AxisTickLabels.drawXTick(AxisTickLabels.java:906)
    at org.swtchart.internal.axis.AxisTickLabels.paintControl(AxisTickLabels.java:887)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
    at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
    at org.eclipse.swt.widgets.Composite.WM_PAINT(Unknown Source)
    at org.eclipse.swt.widgets.Control.windowProc(Unknown Source)
    at org.eclipse.swt.widgets.Display.windowProc(Unknown Source)
    at org.eclipse.swt.internal.win32.OS.UpdateWindow(Native Method)
    at org.eclipse.swt.widgets.Decorations.setVisible(Unknown Source)
    at org.eclipse.swt.widgets.Shell.setVisible(Unknown Source)
    at org.eclipse.swt.widgets.Shell.open(Unknown Source)
    at coil_test.appChart.show(appChart.java:82)
    at coil_test.Coil_Testing$1.run(Coil_Testing.java:182)
Scope Single Ready!

CLASS appChart

package coil_test;

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.swtchart.Chart;
import org.swtchart.ILineSeries;
import org.swtchart.ILineSeries.PlotSymbolType;
import org.swtchart.ISeries.SeriesType;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;

public class appChart {

    protected Display display;
    protected Shell shell;
    private Chart closeChart;
    private double[][] arrClose; //Poles | Data
    private ILineSeries closeL1;
    private ILineSeries closeL2;
    private ILineSeries closeL3;
    private Chart bounceChart;
    private double[][] arrBounce;
    private ILineSeries bounceL1;
    private ILineSeries bounceL2;
    private ILineSeries bounceL3;
    private Chart openChart;
    private double[][] arrOpen;
    private ILineSeries openL1;
    private ILineSeries openL2;
    private ILineSeries openL3;
    private Chart currentChart;
    private double[][] arrCurrent;
    private ILineSeries inrush;
    private ILineSeries seal;
    private double[] arrCycle;
    private boolean updateRequired = false;
    private boolean closeRequired = false;
    private boolean run;

    /**
     * Launch the application.
     * @param args
     */
    public static void main(String[] args) {
        try {
            appChart window = new appChart();
            window.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Open the window.
     */
    public appChart() {
        /*Display display = Display.getDefault();

        createContents();
        shell.open();
        shell.layout();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }*/
    }

    public void show(){
        display = Display.getDefault();

        createContents();
        shell.open();
        shell.layout();

        Thread thread = new Thread(new Runnable() {
            public void run() {
                run = true;
                while (run) {
                    try { Thread.sleep(1000); } catch (Exception e) { }
                    Display.getDefault().syncExec(new Runnable() {
                        public void run() {
                            if(updateRequired){
                                closeChart.update();
                                bounceChart.update();
                                openChart.update();
                                currentChart.update();

                                closeChart.redraw();
                                bounceChart.redraw();
                                openChart.redraw();
                                currentChart.redraw();

                                closeChart.getAxisSet().adjustRange();
                                bounceChart.getAxisSet().adjustRange();
                                openChart.getAxisSet().adjustRange();
                                currentChart.getAxisSet().adjustRange();

                                updateRequired = false;
                            }
                            if(closeRequired){
                                shell.close();
                                shell.dispose();
                                Display.getDefault().close();
                                run = false;
                                closeRequired = false;
                            }
                        }
                    });
                }
            }
        });
        thread.start();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
            try {
                Thread.sleep(50);
                System.out.println("Shell Sleep");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

        thread = null;
    }

    /**
     * Create contents of the window.
     */
    private void createContents() {
        shell = new Shell(SWT.NO_TRIM); // SWT.NO_TRIM | SWT.ON_TOP
        shell.setSize(1280,1024);
        shell.setLocation(1281,0);
        shell.setLayout(null);
        shell.setMinimumSize(1280, 1024);

        closeChart = new Chart(shell, SWT.NONE);
        closeChart.setBounds(0, 0, 1264, 256);
        closeChart.getAxisSet().getXAxis(0).getTitle().setText("");
        closeChart.getAxisSet().getYAxis(0).getTitle().setText("Time (ms)");
        closeChart.getTitle().setText("CLOSE TIME");
        closeL1 = (ILineSeries)closeChart.getSeriesSet().createSeries(SeriesType.LINE, "--L1--");
        closeL1.setLineColor(new Color(Display.getDefault(), 255, 0, 0));
        closeL1.setSymbolType(PlotSymbolType.NONE);
        closeL2 = (ILineSeries)closeChart.getSeriesSet().createSeries(SeriesType.LINE, "--L2--");
        closeL2.setLineColor(new Color(Display.getDefault(), 0, 255, 0));
        closeL2.setSymbolType(PlotSymbolType.NONE);
        closeL3 = (ILineSeries)closeChart.getSeriesSet().createSeries(SeriesType.LINE, "--L3--");
        closeL3.setLineColor(new Color(Display.getDefault(), 0, 0, 255));
        closeL3.setSymbolType(PlotSymbolType.NONE);

        bounceChart = new Chart(shell, SWT.NONE);
        bounceChart.setBounds(0, 256, 1264, 256);
        bounceChart.getAxisSet().getXAxis(0).getTitle().setText("");
        bounceChart.getAxisSet().getYAxis(0).getTitle().setText("Time (ms)");
        bounceChart.getTitle().setText("BOUNCE TIME");
        bounceL1 = (ILineSeries)bounceChart.getSeriesSet().createSeries(SeriesType.LINE, "--L1--");
        bounceL1.setLineColor(new Color(Display.getDefault(), 255, 0, 0));
        bounceL1.setSymbolType(PlotSymbolType.NONE);
        bounceL2 = (ILineSeries)bounceChart.getSeriesSet().createSeries(SeriesType.LINE, "--L2--");
        bounceL2.setLineColor(new Color(Display.getDefault(), 0, 255, 0));
        bounceL2.setSymbolType(PlotSymbolType.NONE);
        bounceL3 = (ILineSeries)bounceChart.getSeriesSet().createSeries(SeriesType.LINE, "--L3--");
        bounceL3.setLineColor(new Color(Display.getDefault(), 0, 0, 255));
        bounceL3.setSymbolType(PlotSymbolType.NONE);

        openChart = new Chart(shell, SWT.NONE);
        openChart.setBounds(0, 512, 1264, 256);
        openChart.getAxisSet().getXAxis(0).getTitle().setText("");
        openChart.getAxisSet().getYAxis(0).getTitle().setText("Time (ms)");
        openChart.getTitle().setText("OPEN TIME");
        openL1 = (ILineSeries)openChart.getSeriesSet().createSeries(SeriesType.LINE, "--L1--");
        openL1.setLineColor(new Color(Display.getDefault(), 255, 0, 0));
        openL1.setSymbolType(PlotSymbolType.NONE);
        openL2 = (ILineSeries)openChart.getSeriesSet().createSeries(SeriesType.LINE, "--L2--");
        openL2.setLineColor(new Color(Display.getDefault(), 0, 255, 0));
        openL2.setSymbolType(PlotSymbolType.NONE);
        openL3 = (ILineSeries)openChart.getSeriesSet().createSeries(SeriesType.LINE, "--L3--");
        openL3.setLineColor(new Color(Display.getDefault(), 0, 0, 255));
        openL3.setSymbolType(PlotSymbolType.NONE);

        currentChart = new Chart(shell, SWT.NONE);
        currentChart.setBounds(0, 768, 1264, 256);
        currentChart.getAxisSet().getXAxis(0).getTitle().setText("");
        currentChart.getAxisSet().getYAxis(0).getTitle().setText("Amps (A)");
        currentChart.getTitle().setText("CURRENT");
        inrush = (ILineSeries)currentChart.getSeriesSet().createSeries(SeriesType.LINE, "Inrush");
        inrush.setLineColor(new Color(Display.getDefault(), 255, 0, 0));
        inrush.setSymbolType(PlotSymbolType.NONE);
        seal = (ILineSeries)currentChart.getSeriesSet().createSeries(SeriesType.LINE, "Seal");
        seal.setLineColor(new Color(Display.getDefault(), 0, 255, 0));
        seal.setSymbolType(PlotSymbolType.NONE);

        arrCycle = new double[0];
        arrClose = new double[3][0];
        arrBounce = new double[3][0];
        arrOpen = new double[3][0];
        arrCurrent = new double[2][0];
    }

    public void updateClose(int cycle, double l1, double l2, double l3){
        double[][] temp = new double[3][cycle];
        for(int j = 0; j < 3; j++){
            for(int i = 0; i < cycle - 1; i++){
                temp[j][i] = arrClose[j][i];
            }
        }
        arrClose = temp;
        arrClose[0][cycle-1] = l1;
        arrClose[1][cycle-1] = l2;
        arrClose[2][cycle-1] = l3;

        updateChart();
    }

    public void updateBounce(int cycle, double l1, double l2, double l3){
        double[][] temp = new double[3][cycle];
        for(int j = 0; j < 3; j++){
            for(int i = 0; i < cycle - 1; i++){
                temp[j][i] = arrBounce[j][i];
            }
        }
        arrBounce = temp;
        arrBounce[0][cycle-1] = l1;
        arrBounce[1][cycle-1] = l2;
        arrBounce[2][cycle-1] = l3;

        updateChart();
    }

    public void updateOpen(int cycle, double l1, double l2, double l3){
        double[][] temp = new double[3][cycle];
        for(int j = 0; j < 3; j++){
            for(int i = 0; i < cycle - 1; i++){
                temp[j][i] = arrOpen[j][i];
            }
        }
        arrOpen = temp;
        arrOpen[0][cycle-1] = l1;
        arrOpen[1][cycle-1] = l2;
        arrOpen[2][cycle-1] = l3;

        updateChart();
    }

    public void updateCurrent(int cycle, double inrush, double seal){
        double[][] temp = new double[2][cycle];
        for(int j = 0; j < 2; j++){
            for(int i = 0; i < cycle - 1; i++){
                temp[j][i] = arrCurrent[j][i];
            }
        }

        arrCurrent = temp;
        arrCurrent[0][cycle-1] = inrush;
        arrCurrent[1][cycle-1] = seal;

        updateChart();
    }

    private void updateChart(){
        int cycleSize = arrCycle.length;
        if(cycleSize < arrClose[0].length || cycleSize < arrBounce[0].length || cycleSize < arrOpen[0].length || cycleSize < arrCurrent[0].length){
            cycleSize = Math.max(arrClose[0].length, arrBounce[0].length);
            cycleSize = Math.max(cycleSize, arrOpen[0].length);
            cycleSize = Math.max(cycleSize, arrCurrent[0].length);

            double[] temp = new double[cycleSize];
            for(int i = 0; i < cycleSize; i++){
                temp[i] = i+1;
            }
            arrCycle = temp;
        }

        closeL1.setYSeries(arrClose[0]);
        closeL2.setYSeries(arrClose[1]);
        closeL3.setYSeries(arrClose[2]);
        bounceL1.setYSeries(arrBounce[0]);
        bounceL2.setYSeries(arrBounce[1]);
        bounceL3.setYSeries(arrBounce[2]);
        openL1.setYSeries(arrOpen[0]);
        openL2.setYSeries(arrOpen[1]);
        openL3.setYSeries(arrOpen[2]);
        inrush.setYSeries(arrCurrent[0]);
        seal.setYSeries(arrCurrent[1]);

        closeL1.setXSeries(arrCycle);
        closeL2.setXSeries(arrCycle);
        closeL3.setXSeries(arrCycle);
        bounceL1.setXSeries(arrCycle);
        bounceL2.setXSeries(arrCycle);
        bounceL3.setXSeries(arrCycle);
        openL1.setXSeries(arrCycle);
        openL2.setXSeries(arrCycle);
        openL3.setXSeries(arrCycle);
        inrush.setXSeries(arrCycle);
        seal.setXSeries(arrCycle);

        updateRequired = true;

        /*
        closeChart.update();
        bounceChart.update();
        openChart.update();
        currentChart.update();
         */
    }

    public void close(){
        closeRequired = true;
    }
}

CLASS Coil_Testing

package coil_test;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

import device_com.Device_Connection;
import device_com.Device_IO;
import device_com.Device_Utility;
import device_com.PLC_IO;
import device_com.PLC_Type_Enum.Variable_Type;
import email_user.Email_User;

public class Coil_Testing {

    private void test() throws IOException{
        <Setting Up Devices and Variables>

        Thread thread = new Thread(){
            public void run(){
                chart = new appChart();
                chart.show();
            }
        };
        thread.start();

        <Collect Data From Test And Update Chart>

        <Write To Excel>
        <Send Email>

        chart.close();
        thread = null;
    }

}

0 个答案:

没有答案