Results 1 to 2 of 2
Thread: Invalid thread acces Execption
- 04-09-2009, 01:03 PM #1
Member
- Join Date
- Apr 2009
- Posts
- 1
- Rep Power
- 0
Invalid thread acces Execption
For my application I have created a menu in the system tray. When you click left you get some dynamic data and when you click right on my menu you get a screen to add a new dynamic menuitem to my system tray menu. but when I try to add something to that menu I get this error:
Exception in thread "AWT-EventQueue-0" org.eclipse.swt.SWTException: Invalid thread access
import java.awt.Frame;
import java.awt.Dimension;
import javax.swing.JButton;
import java.awt.BorderLayout;
import javax.swing.SwingConstants;
import java.awt.event.KeyEvent;
import java.awt.Rectangle;
import javax.swing.JTextField;
import javax.swing.JLabel;
import org.eclipse.swt.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.widgets.*;
public class Test3 extends Frame {
private static final long serialVersionUID = 1L;
private JButton jButton = null;
private JTextField txtInput = null;
private JLabel lblInput = null;
private JLabel lblResult2 = null;
static Display display = new Display ();
static Shell shell = new Shell (display); // @jve:decl-index=0:
static MenuItem testMi = null;
/**
* This method initializes jButton
*
* @return javax.swing.JButton
*/
private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setHorizontalTextPosition(SwingConstants.C ENTER);
jButton.setMnemonic(KeyEvent.VK_UNDEFINED);
jButton.setBounds(new Rectangle(504, 246, 97, 29));
jButton.setText("Click");
//jButton.setSize(0,80);
//jButton.addActionListener(new java.awt.event.ActionListener());
jButton.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
//System.out.println("mouseClicked()"); // TODO Auto-generated Event stub mouseClicked()
lblResult2.setText(txtInput.getText());
testMi.setText("Dynamic");
}
});
//jButton.setRolloverEnabled(false);
//jButton.setPreferredSize(new Dimension(50, 10));
}
return jButton;
}
/**
* This method initializes txtInput
*
* @return javax.swing.JTextField
*/
private JTextField getTxtInput() {
if (txtInput == null) {
txtInput = new JTextField();
txtInput.setBounds(new Rectangle(187, 73, 416, 22));
}
return txtInput;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test3 application = new Test3();
application.initialize();
application.setVisible(true);
Image image = new Image (display, 16, 16);
final Tray tray = display.getSystemTray ();
if (tray == null) {
System.out.println ("The system tray is not available");
}
else {
final TrayItem item = new TrayItem (tray, SWT.NONE);
item.setToolTipText("SWT TrayItem");
item.addListener (SWT.Show, new Listener () {
public void handleEvent (Event event) {
System.out.println("show");
}
});
item.addListener (SWT.Hide, new Listener () {
public void handleEvent (Event event) {
System.out.println("hide");
}
});
final Menu mainMenu = new Menu (shell, SWT.POP_UP);
for (int i =0; i <= 3; i++){
MenuItem mi = new MenuItem(mainMenu, SWT.PUSH);
mi.setText("Main Menu Item " + i);
mi.setEnabled(false);
if (i == 3 ){
mi.setEnabled(true);
mi.setText("Exit program");
mi.addListener(SWT.Selection, new Listener (){
public void handleEvent (Event event){
System.exit(0);
}
});
}
}
testMi = new MenuItem(mainMenu, SWT.PUSH);
testMi.setText("Static text");
item.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
System.out.println("selection");
mainMenu.setVisible(true);
}
});
item.addListener (SWT.DefaultSelection, new Listener () {
public void handleEvent (Event event) {
System.out.println("default selection");
}
});
final Menu menu = new Menu (shell, SWT.POP_UP);
for (int i = 0; i < 8; i++) {
MenuItem mi = new MenuItem (menu, SWT.PUSH);
mi.setText ("Item" + i);
mi.addListener (SWT.Selection, new Listener () {
public void handleEvent (Event event) {
System.out.println("selection " + event.widget);
}
});
if (i == 0) menu.setDefaultItem(mi);
}
item.addListener (SWT.MenuDetect, new Listener () {
public void handleEvent (Event event) {
menu.setVisible (true);
}
});
item.setImage (image);
}
shell.setBounds(50, 50, 300, 200);
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
image.dispose ();
display.dispose ();
}
/**
* This is the default constructor
*/
public Test3() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
lblResult2 = new JLabel();
lblResult2.setBounds(new Rectangle(16, 117, 586, 30));
lblResult2.setText("");
lblInput = new JLabel();
lblInput.setBounds(new Rectangle(13, 70, 168, 26));
lblInput.setText(" Voer een lappie text in:");
this.setLayout(null);
this.setSize(627, 302);
this.setTitle("Frame");
this.setVisible(true);
this.add(getJButton(), null);
this.add(getTxtInput(), null);
this.add(lblInput, null);
this.add(lblResult2, null);
this.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
//lblResult2.setText("So you wanna close this window.. ;-) ");
System.exit(0);
}
});
}
} // @jve:decl-index=0:visual-constraint="10,10"
When you run this, you see a nice menu in the system tray..
add some text in the screen that popup and click on save.. now you see the error.. (In this example ill try to change the static menu into a dynamic one)
- 08-02-2009, 12:19 PM #2
Member
- Join Date
- Aug 2009
- Location
- Heidelberg
- Posts
- 47
- Rep Power
- 0
You are not allowed to access the UI thread directly; you have to wrap it in something like this:
Java Code:new Thread(new Runnable() { public void run() { while (true) { try { Thread.sleep(1000); } catch (Exception e) { } Display.getDefault().asyncExec(new Runnable() { public void run() { ... do any work that updates the screen ... } } } } }).start();
Similar Threads
-
org.eclipse.swt.SWTException: Invalid thread access
By int80 in forum New To JavaReplies: 2Last Post: 08-14-2009, 10:16 AM -
getting following error org.eclipse.swt.SWTException: Invalid thread access
By Madhavee Latha in forum SWT / JFaceReplies: 1Last Post: 03-24-2009, 12:52 PM -
How to allow one user to acces resource
By SantoshBK09 in forum Advanced JavaReplies: 1Last Post: 01-06-2009, 03:11 PM -
Invalid Thread Access?
By xcallmejudasx in forum Advanced JavaReplies: 1Last Post: 10-30-2008, 10:08 PM -
If JNI thread call the java object in another thread, it will crash.
By skaterxu in forum Advanced JavaReplies: 0Last Post: 01-28-2008, 07:02 AM


LinkBack URL
About LinkBacks
Reply With Quote
Bookmarks