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)