GUI Invalid thread access

0

mam włączoną swoją app i GUI chodzi jednak gdy próbuje włączyć przycisk dodaj żeliwo wyskakuje błąd "Invalid thread access" jednak gdy osobno włączam sobie klasę która powinna się uruchomić działa normalnie, czytałem, że chodzi tu o coś z wątkami i rysowaniem sterowanym przez OS ale niezabardzo rozumiem jak mam to rozwiązać:

package pl.edu.agh;

import java.awt.Color;
import java.io.IOException;
import java.util.ArrayList;

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Label;

import pl.edu.agh.dataIn.MathematicTools;
import pl.edu.agh.dataIn.Zeliwo2;
import pl.edu.agh.dataIn.ZeliwoWczytane;

import pl.edu.agh.tools.WczytajZeliwo;
import pl.edu.agh.tools.Wczytywanie;

import pl.edu.agh.tools.Wykres;
import pl.edu.pl.addDicticalIron.AddDicIronFrame;
import pl.edu.pl.addDicticalIron.Swtwczytywanie2;

import org.eclipse.swt.widgets.Combo;

public class Gui {
	Data data = new Data();
	int counter = 0;
	protected Shell shell;
	static private Text textWysokosc;
	static private Text textSzerokosc;
	MathematicTools mt= new MathematicTools();
	Wczytywanie wcz = new Wczytywanie();
	ZeliwoWczytane zelwczyt =	new ZeliwoWczytane();

	/**
	 * Launch the application.
	 * 
	 * @param args
	 */
	public static void main() {
		try {
			Gui window = new Gui();
		
			window.open();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Open the window.
	 */
	public void open() {
		Display display = Display.getDefault();
		createContents();
		shell.open();
		shell.layout();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}

	/**
	 * Create contents of the window.
	 * 
	 * @wbp.parser.entryPoint
	 */
	protected void createContents() {
		shell = new Shell();
		shell.setSize(872, 580);
		shell.setText("Zeliwo");

		Menu menu = new Menu(shell, SWT.BAR);
		shell.setMenuBar(menu);

		MenuItem mntmMenu = new MenuItem(menu, SWT.CASCADE);
		mntmMenu.setText("Menu");

		Composite composite = new Composite(shell, SWT.NONE);
		composite.setBounds(0, 0, 856, 522);

		Composite composite_1 = new Composite(composite, SWT.NONE);
		composite_1.setBounds(0, 0, 225, 522);
		Composite composite_2 = new Composite(composite, SWT.NONE);
		composite_2.setBounds(231, 0, 625, 522);

		ScrolledComposite scrolledComposite = new ScrolledComposite(
				composite_2, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
		scrolledComposite.setBounds(0, 0, 625, 522);
		scrolledComposite.setExpandHorizontal(true);
		scrolledComposite.setExpandVertical(true);

		final Canvas canvas = new Canvas(scrolledComposite, SWT.NONE);
		scrolledComposite.setContent(canvas);
		scrolledComposite.setMinSize(canvas.computeSize(SWT.DEFAULT,
				SWT.DEFAULT));

		Menu menu_1 = new Menu(mntmMenu);
		mntmMenu.setMenu(menu_1);
		
		MenuItem mntmDodajeliwo = new MenuItem(menu_1, SWT.NONE);
		mntmDodajeliwo.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				System.out.println("dodawanie nowego zeliwa");
				
				
				  Swtwczytywanie2 addIron = new Swtwczytywanie2();
           	   String [] temp = {"d","f"};
           	   addIron.main(temp);
				
				
			}
		});
		mntmDodajeliwo.setText("Dodaj \u017Celiwo");

		MenuItem mntmReset = new MenuItem(menu_1, SWT.NONE);
		mntmReset.setText("Reset");

		MenuItem mntmPomoc = new MenuItem(menu_1, SWT.NONE);
		mntmPomoc.setText("Pomoc");

		MenuItem mntmExit = new MenuItem(menu_1, SWT.NONE);
		mntmExit.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				System.exit(0);
			}
		});
		mntmExit.setText("Exit");

		MenuItem mntmAbout = new MenuItem(menu, SWT.NONE);
		mntmAbout.setText("About");

		Button btnRysujSiatke = new Button(composite_1, SWT.NONE);
		btnRysujSiatke.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				int przesuniecie = 10;
				GC gc = new GC(canvas);

				gc.drawLine(przesuniecie, przesuniecie, przesuniecie,
						przesuniecie + Integer.parseInt(textWysokosc.getText()));
				
				gc.drawLine(
						przesuniecie,
						przesuniecie,
						przesuniecie
								+ Integer.parseInt(textSzerokosc.getText()),
						przesuniecie);
				
				gc.drawLine(
						przesuniecie,
						przesuniecie + Integer.parseInt(textWysokosc.getText()),
						przesuniecie
								+ Integer.parseInt(textSzerokosc.getText()),
						przesuniecie + Integer.parseInt(textWysokosc.getText()));
				
				gc.drawLine(
						przesuniecie
								+ Integer.parseInt(textSzerokosc.getText()),
						przesuniecie,
						przesuniecie
								+ Integer.parseInt(textSzerokosc.getText()),
						przesuniecie + Integer.parseInt(textWysokosc.getText()));
				
				// gc.drawLine(19 + 19 * counter, 0 + 19 * counter, 0 + 19 *
				// counter, 19 + 19 * counter);

				gc.dispose();
				counter++;

			}
		});
		btnRysujSiatke.setBounds(10, 339, 75, 25);
		btnRysujSiatke.setText("Rysuj siatke");

		textWysokosc = new Text(composite_1, SWT.BORDER);
		textWysokosc.setText("200");
		textWysokosc.setBounds(10, 273, 76, 21);

		textSzerokosc = new Text(composite_1, SWT.BORDER);
		textSzerokosc.setText("300");
		textSzerokosc.setBounds(92, 273, 76, 21);

		Button btnSiatkaMesh = new Button(composite_1, SWT.NONE);
		btnSiatkaMesh.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				System.out.println("MESH");

			}
		});
		btnSiatkaMesh.setBounds(10, 370, 75, 25);
		btnSiatkaMesh.setText("Siatka / Mesh");
		
		Composite composite_3 = new Composite(composite_1, SWT.NONE);
		composite_3.setBounds(10, 10, 205, 121);
		
		Label lblWybierzZeliwo = new Label(composite_3, SWT.NONE);
		lblWybierzZeliwo.setBounds(10, 10, 83, 15);
		lblWybierzZeliwo.setText("wybierz zeliwo");
		
	final	Button btnZeliwo = new Button(composite_3, SWT.RADIO);
		btnZeliwo.setBounds(10, 31, 90, 16);
		btnZeliwo.setText("zeliwo 1");
		
		final Button btnZeliwo_1 = new Button(composite_3, SWT.RADIO);
		btnZeliwo_1.setBounds(10, 53, 90, 16);
		btnZeliwo_1.setText("zeliwo 2");
		
		Button btnWykresCtp = new Button(composite_3, SWT.NONE);
		btnWykresCtp.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				
			
				if (btnZeliwo.getSelection()){
					
					System.out.println("CTP zeliwo 1");
				}else if(btnZeliwo_1.getSelection()){
					System.out.println("CTP zeliwo 2");
					Zeliwo2 zel2 = new Zeliwo2();
					
					
					Wykres wykres = new Wykres();
					wykres.DrawCTP(zel2);
					wykres.DrawCTP2(zelwczyt);
					
					
				}
			}
		});
		btnWykresCtp.setBounds(10, 75, 75, 25);
		btnWykresCtp.setText("wykres CTP");
		
		Button btnSss = new Button(composite_3, SWT.NONE);
		btnSss.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
//				Zeliwo2 zel2 = new Zeliwo2();
//				Wykres wykres = new Wykres();
//				//wykres.DrawSSS( zel2, mt);
//				MathematicTools mt = new MathematicTools();
//				
//				mt.funkcjaDoLiczeniaSSS2(mt.UDZIALPROCENTOWYSKROCONY, zelwczyt);
//				for(int i =0;i < 8; i++){
//					for(int j=0 ;j<3 ;j++){
//						System.out.println(zelwczyt.wynikiSSS[j][i]);
//					}
//					System.out.println();
//				}
			}
		});
		btnSss.setBounds(91, 75, 75, 25);
		btnSss.setText("sss");
		
		
		final Combo combo = new Combo(composite_3, SWT.NONE);
		Wczytywanie wcz = new Wczytywanie();
		wcz.wczytajteraz();
		ArrayList<String> wczytanePliki = wcz.wczytajteraz();
		
		for(String s : wczytanePliki){
			combo.add(s);
		}
//		combo.add("1");
//		combo.add("2");
//		combo.add("3");
//		combo.add("4");
//		combo.add("5");
		combo.setBounds(91, 31, 91, 23);
		
		Button btnNewButton = new Button(composite_1, SWT.NONE);
		btnNewButton.addSelectionListener(new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				System.out.println(combo.getText());
				WczytajZeliwo wczytzel = new WczytajZeliwo();
				try {
					
					wczytzel.wczytajZel(combo.getText(), zelwczyt);
//					System.out.println("----------------------------------");
//					System.out.println(zelwczyt.startCzas);
//					System.out.println(zelwczyt.startTemp);
//					System.out.println(zelwczyt.midCzas);
//					System.out.println(zelwczyt.midTemp);
//					System.out.println(zelwczyt.endCzas);
//					System.out.println(zelwczyt.endTemp);
					
					zelwczyt.tabStart = zelwczyt.przebudowanieList(zelwczyt.startCzas, zelwczyt.startTemp);
					zelwczyt.tabMid = zelwczyt.przebudowanieList(zelwczyt.midCzas, zelwczyt.midTemp);
					zelwczyt.tabEnd = zelwczyt.przebudowanieList(zelwczyt.endCzas, zelwczyt.endTemp);
//					for(int i=0; i< zelwczyt.tabStart.length;i++){
//						System.out.println("taebelki");
//						System.out.println(zelwczyt.tabStart[i][0]);
//					}
				} catch (IOException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			}
		});
		btnNewButton.setBounds(10, 154, 75, 25);
		btnNewButton.setText("New Button");

	}
}
package pl.edu.pl.addDicticalIron;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.widgets.Table;



public class Swtwczytywanie2 {
	 public static Table table;
  public static void main(String[] args) {
	 

   
	
	
   final Display display2 = new Display();
    final Shell shell2 = new Shell(display2);
    shell2.setSize(760, 711);
    shell2.setText("Canvas Example");
    shell2.setLayout(new FillLayout());
    
    Composite composite = new Composite(shell2, SWT.NONE);
    
    Button btnWczytajDane = new Button(composite, SWT.NONE);
    btnWczytajDane.setBounds(10, 10, 96, 25);
    btnWczytajDane.setText("wczytaj dane");
    
    Canvas canvas_1 = new Canvas(composite, SWT.NONE);
    canvas_1.addMouseListener(new MouseAdapter() {
    	@Override
    	public void mouseUp(MouseEvent e) {
    		System.out.println(e.x+", "+ e.y);
    		TableItem item1 = new TableItem(table, SWT.NONE);
    		
    	    item1.setText(new String[] { ""+e.x, ""+e.y });
    	}
    });
    canvas_1.setBounds(282, 37, 411, 376);
    
    table = new Table(composite, SWT.BORDER | SWT.FULL_SELECTION);
    table.setBounds(46, 466, 374, 172);
    table.setHeaderVisible(true);
    table.setLinesVisible(true);
    
    TableColumn tblclmnX = new TableColumn(table, SWT.NONE);
    tblclmnX.setWidth(100);
    tblclmnX.setText("x");
    
    TableColumn tblclmnY = new TableColumn(table, SWT.NONE);
    tblclmnY.setWidth(100);
    tblclmnY.setText("y");
  composite.redraw();
    canvas_1.addPaintListener(new PaintListener() {
        public void paintControl(PaintEvent e) {
          Image image = new Image(display2, "C:/Users/Michał/workspace/ZeliwoMGR/src/pl/edu/pl/addDicticalIron/obrazekCTP.jpg");

          e.gc.drawImage(image, 10, 10);

          image.dispose();
        }
      });
    
   

    shell2.open();
    while (!shell2.isDisposed()) {
      if (!display2.readAndDispatch()) {
        display2.sleep();
      }
    }
    display2.dispose();
  }
}
org.eclipse.swt.SWTException: Invalid thread access
	at org.eclipse.swt.SWT.error(SWT.java:4282)
	at org.eclipse.swt.SWT.error(SWT.java:4197)
	at org.eclipse.swt.SWT.error(SWT.java:4168)
	at org.eclipse.swt.widgets.Display.checkDisplay(Display.java:775)
	at org.eclipse.swt.widgets.Display.create(Display.java:837)
	at org.eclipse.swt.graphics.Device.<init>(Device.java:137)
	at org.eclipse.swt.widgets.Display.<init>(Display.java:489)
	at org.eclipse.swt.widgets.Display.<init>(Display.java:480)
	at pl.edu.pl.addDicticalIron.Swtwczytywanie2.main(Swtwczytywanie2.java:29)
	at pl.edu.agh.Gui$1.widgetSelected(Gui.java:127)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
	at pl.edu.agh.Gui.open(Gui.java:74)
	at pl.edu.agh.Gui.main(Gui.java:59)
	at pl.edu.agh.App.main(App.java:19) 
0

Było już pierdyliard razy na tym forum. Jest tutaj opcja zwana szukaj.

1 użytkowników online, w tym zalogowanych: 0, gości: 1