Page 1 of 2 12 LastLast
Results 1 to 20 of 32
Like Tree1Likes

Thread: Java Event Dispatch Thread (EDT)

  1. #1
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Java Event Dispatch Thread (EDT)

    Based on my understanding about java event dispatch thread, it is the thread that used for java GUI and all the events will be queued in the EDT.
    Java Swing is not "thread-safe" so it is required to be executed under EDT by using SwingUtilities.invokeLater();. There are few question i'm still confusing about ...

    1. All the events such as keylistener, actionlistener and others are automatically executed under EDT ?
    2. All the update to the GUI appearance such as JTextField.setText(), or adding new component into panel or frame required to be done through EDT?
    3. Constructing new Frame must be done through EDT?
    4. repaint() must done through EDT ?
    Java Code:
    SwingUtilities.invokeLater(new Runnable(){
    public void run(){
    Demo demo = new Demo();
    //Demo class extends JFrame
    }
    );
    5. EDT is a very important topic that we must understand if we want to program java GUI? What will happen if we program without following the EDT rules?

    Your help and time are greatly appreciated

  2. #2
    jim829 is online now Senior Member
    Join Date
    Jan 2013
    Location
    Northern Virginia, United States
    Posts
    3,420
    Rep Power
    5

    Default Re: Java Event Dispatch Thread (EDT)

    If you want to see first hand which thread is active when processing a particular method, just print Thread.currentThread().getName().

    You want the current thread to be the EDT so that you can be certain that no other thread is presently changing the values you are trying to access. If the Swing methods were thread safe, this would not be a problem. As long as all Swing related state is accessed in a single thread, then it is relatively impossible for any given value to be accessed simultaneously by any other event or process. This is true of any multi-threaded system, not just Swing. Normally, safe access across multiple threads is handled by judicious use of synchronization.

    Regards,
    Jim
    The Java™ Tutorial | SSCCE | Java Naming Conventions
    Poor planning our your part does not constitute an emergency on my part.

  3. #3
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by jim829 View Post
    If you want to see first hand which thread is active when processing a particular method, just print Thread.currentThread().getName().

    You want the current thread to be the EDT so that you can be certain that no other thread is presently changing the values you are trying to access. If the Swing methods were thread safe, this would not be a problem. As long as all Swing related state is accessed in a single thread, then it is relatively impossible for any given value to be accessed simultaneously by any other event or process. This is true of any multi-threaded system, not just Swing. Normally, safe access across multiple threads is handled by judicious use of synchronization.

    Regards,
    Jim
    Thanks for your explanation Jim. So, basically all the Swing related process such as alteration or creation must done through EDT so others thread will not affect it?
    Java Code:
    SwingUtilities.invokeLater(new Runnable(){
    public void run(){
    Demo demo = new Demo();
    //Demo class extends JFrame
    }
    );
    Does this code means that the creation of this frame ( included all the components ) are queued in EDT? Demo JFrame will not having some problem such as components missing unless there is something wrong with the coding ? Because last time i have tried to create a JFrame but all the components are missing unless i resize the frame ( maximize and restore it to window ). Is it because of multiple thread ?

  4. #4
    JosAH's Avatar
    JosAH is online now Moderator
    Join Date
    Sep 2008
    Location
    Voorschoten, the Netherlands
    Posts
    13,385
    Blog Entries
    7
    Rep Power
    20

    Default Re: Java Event Dispatch Thread (EDT)

    w.r.t. event handling: an event is detected by the EDT and it dispatches the event to a listener on the same EDT; so the listener also runs on the EDT; that's why your entire GUI becomes sluggish and non-responsive if one of the listeners does a lot of work in the EDT. Calling repaint() can be done from any thread.

    kind regards,

    Jos
    cenosillicaphobia: the fear for an empty beer glass

  5. #5
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by JosAH View Post
    w.r.t. event handling: an event is detected by the EDT and it dispatches the event to a listener on the same EDT; so the listener also runs on the EDT; that's why your entire GUI becomes sluggish and non-responsive if one of the listeners does a lot of work in the EDT. Calling repaint() can be done from any thread.

    kind regards,

    Jos
    Thanks Jos. So if i meet the problem that similar to it, what i need to do is just call myFrameName.repaint()? I just need a confirmation since my college doesn't teach me about EDT for the GUI lesson.

  6. #6
    JosAH's Avatar
    JosAH is online now Moderator
    Join Date
    Sep 2008
    Location
    Voorschoten, the Netherlands
    Posts
    13,385
    Blog Entries
    7
    Rep Power
    20

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by iFrozen94 View Post
    Thanks Jos. So if i meet the problem that similar to it, what i need to do is just call myFrameName.repaint()? I just need a confirmation since my college doesn't teach me about EDT for the GUI lesson.
    Why call a repaint() on the entire JFrame? Call it on the JComponent that has actually changed (needs repainting) and the EDT will do the rest.

    kind regards,

    Jos
    cenosillicaphobia: the fear for an empty beer glass

  7. #7
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by JosAH View Post
    Why call a repaint() on the entire JFrame? Call it on the JComponent that has actually changed (needs repainting) and the EDT will do the rest.

    kind regards,

    Jos
    But all the components in the JFrame are not displayed properly. All the JComponent are missing. It is impossible to call repaint() on every JComponent.
    There was another problem i facing :
    Java Code:
           
    setBackground(new Color(0,0,0,150));
           addWindowListener(new WindowAdapter() {
               @Override
            public void windowOpened(WindowEvent e) {
                setExtendedState(MAXIMIZED_BOTH);
            }
            });
    //This is a part of my JFrame code
    Normally the JFrame run properly. But sometime, it become like this :
    Java Event Dispatch Thread (EDT)-untitled.png
    ( I just draw it by using MSPaint, assume the gray part is my JFrame with halftransparent and the white part is my laptop desktop )
    So, how i'm going to solve this problem? I asked my lecture she says she has no idea why it become like this.

  8. #8
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    SW Missouri
    Posts
    17,306
    Rep Power
    25

    Default Re: Java Event Dispatch Thread (EDT)

    Can you make a SSCCE Short, Self Contained, Correct Example that shows the problem?
    If you don't understand my response, don't ignore it, ask a question.

  9. #9
    JosAH's Avatar
    JosAH is online now Moderator
    Join Date
    Sep 2008
    Location
    Voorschoten, the Netherlands
    Posts
    13,385
    Blog Entries
    7
    Rep Power
    20

    Default Re: Java Event Dispatch Thread (EDT)

    A JFrame can't be painted by you (the user); it has a content pane which does all the drawing; are you overriding the paint( ... ) method in the JFrame? Don't do that. Also read the API documentation for the JFrame class; it mentions that fact explitly.

    kind regards,

    Jos
    cenosillicaphobia: the fear for an empty beer glass

  10. #10
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by Norm View Post
    Can you make a SSCCE Short, Self Contained, Correct Example that shows the problem?
    Java Code:
    import control.HistoryControl;
    import control.MemberControl;
    import domain.Member;
    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.*;
    import static java.awt.Frame.MAXIMIZED_BOTH;
    import java.util.ArrayList;
    import javax.swing.border.TitledBorder;
    import setting.DateSetting;
    
    public class AddMember extends JFrame implements ActionListener{
    
        private String[] genderChoice = {"Male", "Female"};
    
        private ArrayList<Member> memberList = null;
        
        private JLabel jlMemberID = new JLabel("Member ID");
        private JLabel jlName = new JLabel("Name");
        private JLabel jlGender = new JLabel("Gender");
        private JLabel jlAddress = new JLabel("Address");
        private JLabel jlPhone = new JLabel("Phone");
        private JLabel jlNote  = new JLabel("*Note : Each people will be charged for RM5.00 for membership fees");
        
        private JComboBox jcbgender = new JComboBox(genderChoice);
        private JTextArea jtaAddress = new JTextArea();
        
        private JTextField jtfPhone = new JTextField(15);
        private JTextField jtfMemberID = new JTextField(15);
        private JTextField jtfName = new JTextField(15);
        
        private JButton jbtExit = new JButton("Close");
        private JButton jbtReset = new JButton("Reset");
        private JButton jbtSubmit = new JButton("Submit");
        
        private MemberControl memberControl;
        private HistoryControl historyControl;
        private DateSetting dateSetting;
        private StringBuilder sb = new StringBuilder();
        
        public AddMember(){
    
            memberControl = new MemberControl();
            historyControl = new HistoryControl();
            dateSetting = new DateSetting();
            
            memberList = memberControl.getRecords();
            
            jlMemberID.setForeground(Color.WHITE);
            jtfMemberID.setText(getLatestMemberID());
            jtfMemberID.setEditable(false);
            
            jlName.setForeground(Color.WHITE);
            jlGender.setForeground(Color.WHITE);
            jlAddress.setForeground(Color.WHITE);
            jlPhone.setForeground(Color.WHITE);
            jlNote.setForeground(Color.WHITE);
            
            jbtExit.addActionListener(this);
            jbtReset.addActionListener(this);
            jbtSubmit.addActionListener(this);
            
            jtfName.setName("name");
            jtfName.setInputVerifier(new inputVerifier());
            jtfPhone.setName("phone");
            jtfPhone.setInputVerifier(new inputVerifier());
    
    
            setUndecorated(true);
            setVisible(true);
            
           setBackground(new Color(0,0,0,150));
           addWindowListener(new WindowAdapter() {
               @Override
            public void windowOpened(WindowEvent e) {
                setExtendedState(MAXIMIZED_BOTH);
            }
            });
            
            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            setLayout(new GridBagLayout());
            
            add(new transparentPanel());
            
            setLocationRelativeTo(null);
    
        }
        
        private String getLatestMemberID(){
            
            String memberID = memberList.get(memberList.size()-1).getMemberID();
            //System.out.println(memberID);
            int memberNo = Integer.parseInt(memberID.substring(1,4));
            memberNo++;
            String latestMemberID = String.format("A%03d", memberNo);
            
            return latestMemberID;
            
        }
        
        private class inputVerifier extends InputVerifier{
            
            public inputVerifier(){
                
            }
    
            @Override
            public boolean verify(JComponent input) {
                //jtfName
                switch (input.getName()) {
                    case "name":
                        //if name contains number
                        for(int i=0; i<jtfName.getText().length(); i++){
                            if(Character.isDigit(jtfName.getText().charAt(i))){
                                JOptionPane.showMessageDialog(null, "Please use 'I' to indicate number.\nExample: AlexanderII");
                                jtfName.requestFocusInWindow();
                                jtfName.setBackground(Color.RED);
                                jtfName.setForeground(Color.WHITE);
                                return false;
                            }
                        }
                        //if name exist in database
                        for(int i=0; i<memberList.size(); i++){
                            if(memberList.get(i).getUserName().equalsIgnoreCase(jtfName.getText().toString())){
                                jtfName.requestFocusInWindow();
                                jtfName.setBackground(Color.RED);
                                jtfName.setForeground(Color.WHITE);
                                JOptionPane.showMessageDialog(null, "" +jtfName.getText().toString() +" already a member.");
                                return false;
                            }
                         }
                        //if no invalid format
                        jtfName.setBackground(Color.WHITE);
                        jtfName.setForeground(Color.BLACK);
                        break;
                    case "phone":
                        if(jtfPhone.getText().length() > 15){
                           JOptionPane.showMessageDialog(null, "Phone number length must less than or equal to 15.");
                           jtfPhone.requestFocusInWindow();
                           jtfPhone.setBackground(Color.red);
                           jtfPhone.setForeground(Color.WHITE);
                           return false;
                        }
                        else{
                            for(int i=0; i<jtfPhone.getText().length(); i++){
                                if(Character.isDigit(jtfPhone.getText().charAt(i))==false){
                                    if(jtfPhone.getText().charAt(i)!='-'){
                                        JOptionPane.showMessageDialog(null, "Phone number contain only digits.");
                                        jtfPhone.requestFocusInWindow();
                                        jtfPhone.setBackground(Color.red);
                                        jtfPhone.setForeground(Color.WHITE);
                                    return false;
                                    }
                                }
                            }
                        }
                        jtfPhone.setBackground(Color.white);
                        jtfPhone.setForeground(Color.black);
                        break;  
                }
                    return true;
            }
            
        }
        
        private class transparentPanel extends JPanel{
            
            public transparentPanel(){
                
                setLayout(new BorderLayout(10,10));
                setBackground(new Color(162,0,255,150));
                setOpaque(false);
                add(new PersonalInformation(), BorderLayout.NORTH);
                add(jlNote, BorderLayout.CENTER);
                add(new ButtonPanel(), BorderLayout.SOUTH);
                
            }
            
            @Override
            public void paintComponent(Graphics g){
                g.setColor(getBackground());
                g.fillRect(0, 0, getWidth(), getHeight());
                super.paintComponent(g);
            }
            
        }
       
        
        private class PersonalInformation extends JPanel{
            
            public PersonalInformation(){
                
                setBackground(new Color(0,0,0,0));
                setOpaque(false);
                setLayout(new GridBagLayout());
                //null, border title, horizontal allignment, vertical alignment, font, color
                setBorder(BorderFactory.createTitledBorder(null, "Personal Information", 
                        TitledBorder.CENTER, TitledBorder.TOP, new Font("times new roman",Font.BOLD,15), Color.WHITE));
                
                GridBagConstraints c = new GridBagConstraints();
                c.insets = new Insets(0,20,10,20);
                c.fill = GridBagConstraints.HORIZONTAL;
                c.weightx = 0.5;
                c.weighty = 0.5;
                
                c.gridx = 0;
                c.gridy = 0;
                add(jlMemberID, c);
                
                c.gridx = 1;
                c.gridy = 0;
                add(jtfMemberID, c);
                
                c.gridx = 0;
                c.gridy = 1;
                add(jlName, c);
                
                c.gridx = 1;
                c.gridy = 1;
                add(jtfName, c);
                
                c.gridx = 0;
                c.gridy = 2;
                add(jlGender, c);
                
                c.gridx = 1;
                c.gridy = 2;
                add(jcbgender, c);
                
                c.gridx = 0;
                c.gridy = 3;
                add(jlPhone, c);
                
                c.gridx = 1;
                c.gridy = 3;
                add(jtfPhone, c);
                
                c.gridx = 0;
                c.gridy = 4;
                add(jlAddress, c);
                
                c.gridx = 1;
                c.gridy = 4;
                c.fill = GridBagConstraints.BOTH;
                c.gridheight = 2;
                add(new JScrollPane(jtaAddress),c);
                
                c.gridheight = 1;
                c.ipady = 70;
                c.gridx = 0;
                c.gridy = 5;
                add(new JLabel(), c);
                
            }
        }
        
        private class ButtonPanel extends JPanel{
            
            public ButtonPanel(){
                
                setLayout(new FlowLayout());
                setBackground(new Color(0,0,0,0));
                setOpaque(false);
                add(jbtSubmit);
                add(jbtReset);
                add(jbtExit);
                
            }
            
        }
        
        @Override
        public void actionPerformed(ActionEvent e){
            
            if(e.getSource() ==  jbtExit){
                dispose();
            }
            else if(e.getSource() == jbtReset){
                jtfName.setText(null);
                jtaAddress.setText(null);
                jtfPhone.setText(null);
            }
            else if(e.getSource() == jbtSubmit){
                
                int i = 0;
                sb = new StringBuilder();
                boolean filled = true;
                
                if(jtfName.getText().length()==0){
                    filled = false;
                    i++;
                    sb.append(+i).append(" Name\n");
                }
                if(jtfPhone.getText().length()==0){
                    filled = false;
                    i++;
                    sb.append(+i).append(" Phone\n");
                }
                if(jtaAddress.getText().length()==0){
                    filled = false;
                    i++;
                    sb.append(+i).append(" Address\n");
                }
                
                if(!filled){
                    JOptionPane.showMessageDialog(null, "Please fill up the following field : \n\n" + sb,
                            "ERROR", JOptionPane.ERROR_MESSAGE);
                }
                else{
                    String memberID = jtfMemberID.getText();
                    String memberPosition = "Normal";
                    String memberPassword = "taruc1234";// default password
                    String memberName = jtfName.getText();
                    String memberGender = jcbgender.getSelectedItem().toString();
                    String memberPhone = jtfPhone.getText();
                    String memberAddress = jtaAddress.getText();
                    memberControl.addRecord(memberID, memberPosition, memberPassword, memberName, memberGender, memberPhone, memberAddress);
                    String history = String.format("%s has registered as a member", memberName);
                    historyControl.addHistory(MainMenu.getUser(),history, dateSetting.getCurrentTime(),"historymember");
                    dispose();
                }
            }
        }
         
        public static void main(String[] args){     
            javax.swing.SwingUtilities.invokeLater(new Runnable(){
    
                @Override
                public void run() {
                   AddMember addMember = new AddMember();
                }
             });
            
        }
        
    }
    Here you go :) Most of the code can be ignored seems it just verification.
    private MemberControl memberControl;
    private HistoryControl historyControl;
    private DateSetting dateSetting;
    memberControl and historyControl get data from database, dateSetting is used to get current system time and format it into the format i want.

  11. #11
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by JosAH View Post
    A JFrame can't be painted by you (the user); it has a content pane which does all the drawing; are you overriding the paint( ... ) method in the JFrame? Don't do that. Also read the API documentation for the JFrame class; it mentions that fact explitly.

    kind regards,

    Jos
    No, i does not overriding the paint method in JFrame.

  12. #12
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    SW Missouri
    Posts
    17,306
    Rep Power
    25

    Default Re: Java Event Dispatch Thread (EDT)

    Most of the code can be ignored
    336 lines is not a Short program.
    Also the posted code does NOT Compile - missing classes.

    Can you try again to make a SSCCE?
    If you don't understand my response, don't ignore it, ask a question.

  13. #13
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by Norm View Post
    336 lines is not a Short program.
    Also the posted code does NOT Compile - missing classes.

    Can you try again to make a SSCCE?
    Oh, sorry about that , i was new to programming. I try to make another one now.

  14. #14
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by Norm View Post
    336 lines is not a Short program.
    Also the posted code does NOT Compile - missing classes.

    Can you try again to make a SSCCE?
    Java Code:
    public class Demo extends JFrame{
        
        private JButton jbtExit = new JButton("Exit");
        
        public Demo(){
            
           setTitle("Demo");
           setUndecorated(true);
           
           setBackground(new Color(0,0,0,150));
           addWindowListener(new WindowAdapter() {
               @Override
            public void windowOpened(WindowEvent e) {
                setExtendedState(MAXIMIZED_BOTH);
            }
            });
    
           setLayout(new GridBagLayout());
           add(new TransparentPanel());
           setLocationRelativeTo(null);
           setVisible(true);
        }
        
        private class TransparentPanel extends JPanel{
            
            public TransparentPanel(){
                setLayout(new GridBagLayout());
                GridBagConstraints c = new GridBagConstraints();
                
                c.weightx = 0;
                c.weighty = 0;
                
                c.gridx = 0;
                c.gridy = 0;
                
                add(jbtExit, c);
                
                jbtExit.addActionListener(new ActionListener(){
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        dispose();
                    }
                });
                
            }
            
            @Override
            public void paintComponent(Graphics g){
                g.setColor(new Color(0,0,0,0));
                g.fillRect(0, 0,getWidth(),getHeight());
                super.paintComponent(g);
            }
        }
        
        public static void createAndShowGui(){
            if(SwingUtilities.isEventDispatchThread()){
                new Demo();
            }
            else{
                SwingUtilities.invokeLater(new Runnable(){
                    @Override
                    public void run() {
                        new Demo();
                    }
                });
            }
        }
        
        public static void main(String[] args){
            createAndShowGui();
        }
    }
    As my previous reply, the problem occurred but rarely ...

  15. #15
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    SW Missouri
    Posts
    17,306
    Rep Power
    25

    Default Re: Java Event Dispatch Thread (EDT)

    problem occurred but rarely
    Does the problem happen with the code in post#14? Will I be able to see the problem if I copy, compile and execute that code?
    If you don't understand my response, don't ignore it, ask a question.

  16. #16
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by Norm View Post
    Does the problem happen with the code in post#14? Will I be able to see the problem if I copy, compile and execute that code?
    I think the problem is somewhere around there, but i compiled it and it works perfectly but sometime it doesn't ( can be said depend on luck ). I'm totally lost and don't know what was the problem.

  17. #17
    JosAH's Avatar
    JosAH is online now Moderator
    Join Date
    Sep 2008
    Location
    Voorschoten, the Netherlands
    Posts
    13,385
    Blog Entries
    7
    Rep Power
    20

    Default Re: Java Event Dispatch Thread (EDT)

    Move line #51 before line #49, otherwise you wipe out what you have just drawn.

    kind regards,

    Jos
    cenosillicaphobia: the fear for an empty beer glass

  18. #18
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by JosAH View Post
    Move line #51 before line #49, otherwise you wipe out what you have just drawn.

    kind regards,

    Jos
    Owh ... maybe that was the line that causes this problem. How silly me
    Thanks Sir Jos

  19. #19
    Norm's Avatar
    Norm is offline Moderator
    Join Date
    Jun 2008
    Location
    SW Missouri
    Posts
    17,306
    Rep Power
    25

    Default Re: Java Event Dispatch Thread (EDT)

    The code draws a gray, transparent screen over the whole monitor window with a button in the middle. It has done that every time I executed it.
    If you don't understand my response, don't ignore it, ask a question.

  20. #20
    iFrozen94 is offline Member
    Join Date
    Feb 2014
    Posts
    18
    Rep Power
    0

    Default Re: Java Event Dispatch Thread (EDT)

    Quote Originally Posted by Norm View Post
    The code draws a gray, transparent screen over the whole monitor window with a button in the middle. It has done that every time I executed it.
    Gray transparent panel? Mine was black transparent. By the way, the problem occurred rarely ( that's why i say depend on luck ) Last time my project was using the exactly same code for the design and can be said that out of 100 time i compile it, 1 time the problem occurred. Sometime the problem doesn't occur.

Page 1 of 2 12 LastLast

Similar Threads

  1. Cant dispatch event or listener?
    By heatblazer in forum Advanced Java
    Replies: 5
    Last Post: 05-25-2013, 09:58 PM
  2. Dispatch event Mousemoved more humanlike
    By coolking in forum AWT / Swing
    Replies: 3
    Last Post: 02-03-2012, 10:36 PM
  3. Replies: 5
    Last Post: 04-14-2010, 05:26 AM
  4. How to send event from thread to GUI?
    By mikeeve in forum New To Java
    Replies: 3
    Last Post: 03-13-2009, 02:33 AM
  5. Error: Exception during event dispatch!
    By Javid in forum AWT / Swing
    Replies: 1
    Last Post: 08-02-2008, 01:20 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •