JTextField通过X11转发挂起GUI更新

时间:2013-04-11 17:13:41

标签: java swing jtextfield freeze x11-forwarding

我有一个Swing GUI,允许用户根据需要将JTextField添加到GUI。当我在控制台上本地运行(在ubuntu上)时,一切正常。当我在使用X11转发的Windows机器上运行Cygwin的GUI时,一切都很好,但当我点击“添加”按钮放一个GUI上的新JTextField,文本字段按预期显示,但我无法长时间点击或修改它等。事实上,我无法点击原始文本字段。经过一段时间超过30秒后,文本字段恢复生机并正常工作,直到我再次点击“添加”。

我在下面加了一个SSCCE来证明这个问题。再次,这似乎只在使用X11-forwarding运行时发生,如果我直接在Ubuntu控制台上运行,它会按预期工作,所以我不确定这是否可以为其他人重现。

最后一条信息 - 在我的真实程序中,单击“添加”按钮会导致添加JComboBox和两个JTextField。组合框立即响应,但GUI上的所有文本字段(新的和旧的)都没有。

HmmFrame.java:

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

public class HmmFrame extends JFrame
{
  ArrayList< JTextField > fields;
  JPanel mainPan;
  JButton addButton;

  HmmFrame()
  {
    super("Hmmm");
    JTextField curField;

    fields = new ArrayList< JTextField >();

    setLayout(new FlowLayout());

    mainPan = new JPanel(new FlowLayout());
    this.add(mainPan);

    addButton = new JButton("Add");
    addButton.addActionListener(new HmmListener());
    this.add(addButton);

    curField = new JTextField("Try");

    fields.add(curField);
    updateGUI();

    setVisible(true);
  }

  public void updateGUI()
  {
    mainPan.removeAll();
    for (JTextField curField : fields)
    {
      mainPan.add(curField);
    }
    pack();
  }

  public class HmmListener implements ActionListener
  {
    public void actionPerformed(ActionEvent actEv)
    {
      JTextField curField;

      curField = new JTextField("New One" + fields.size());
      fields.add(curField);
      updateGUI();
    }
  }
}

Hmm.java(司机)

public class Hmm
{
  public static void main(String [] args)
  {
    HmmFrame hmmFrame;

    hmmFrame = new HmmFrame();
  }
}

0 个答案:

没有答案