Java JTextField通过X11转发挂起GUI更新

Java JTextField通过X11转发挂起GUI更新,java,swing,jtextfield,freeze,x11-forwarding,Java,Swing,Jtextfield,Freeze,X11 Forwarding,我有一个Swing GUI,允许用户根据需要向GUI添加JTextFields。当我在控制台(ubuntu)上本地运行这个程序时,一切都正常。。当我使用X11转发在Windows框上从Cygwin运行GUI时,一切都很好,但当我单击“添加”按钮在GUI上放置一个新的JTextField时,文本字段会按预期显示,但我无法长时间单击或修改它,等等。事实上,我也不能在原始文本字段中单击。。30秒多一点后,文本字段恢复正常工作,直到我再次单击“添加” 我在下面包含了一个SSCCE,它演示了这个问题。同样

我有一个Swing GUI,允许用户根据需要向GUI添加JTextFields。当我在控制台(ubuntu)上本地运行这个程序时,一切都正常。。当我使用X11转发在Windows框上从Cygwin运行GUI时,一切都很好,但当我单击“添加”按钮在GUI上放置一个新的JTextField时,文本字段会按预期显示,但我无法长时间单击或修改它,等等。事实上,我也不能在原始文本字段中单击。。30秒多一点后,文本字段恢复正常工作,直到我再次单击“添加”

我在下面包含了一个SSCCE,它演示了这个问题。同样,这似乎只发生在使用X11转发运行时,如果我直接在Ubuntu控制台上运行,它会按预期工作,因此我不确定这是否可以为其他所有人复制

最后一条信息——在我的真实程序中,单击add按钮会添加一个JComboBox和两个JTextFields。组合框立即响应,但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();
    }
  }
}

无法复制,抱歉。您可以在swingworker线程上尝试“添加”操作。这可能会解决问题,但我不确定这是否与你的问题有关。这就是我所指的,以防万一:+1对于SSCCE,请注意在任何环境中使用的真实代码也请参见。因此,您是通过ssh运行X11的,比如
ssh-X等等。
?是的,没错。。我在本地网络上。在Windows中,我启动Cygwin,启动Xwindows,启动一个终端xhost+,ssh-xMyubuntumachine,在Ubuntu机器上运行这个程序,它在Cygwin中显示,但它的行为与前面描述的一样。当我转身直接在Ubuntu控制台上运行时,一切都正常。
public class Hmm
{
  public static void main(String [] args)
  {
    HmmFrame hmmFrame;

    hmmFrame = new HmmFrame();
  }
}