Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8185326

[macos] Java text field loses focus on macOS 10.13

XMLWordPrintable

      FULL PRODUCT VERSION :
      java version "1.8.0_141"
      also reproducible with java version "9" (build 9+179)


      ADDITIONAL OS VERSION INFORMATION :
      ProductName: Mac OS X
      ProductVersion: 10.13
      BuildVersion: 17A315i

      EXTRA RELEVANT SYSTEM CONFIGURATION :
      Reproducible over VNC / Mac to Mac screen sharing

      A DESCRIPTION OF THE PROBLEM :
      When connecting to macOS 10.13 via VNC/screen sharing, switching between applications causes Java windows to lose keyboard focus, preventing text input.



      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Connect to macOS 10.13 using VNC / screen sharing
      Launch the attached TextDemo.java
      Type some text in the text field
      Switch to another application, e.g. System Preferences
      Click back on the Java window and try to type in the text field

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      Java text field gets focus back and text can be input
      ACTUAL -
      Java text field does not receive focus and cannot type text

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      /*
       * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
       *
       * Redistribution and use in source and binary forms, with or without
       * modification, are permitted provided that the following conditions
       * are met:
       *
       * - Redistributions of source code must retain the above copyright
       * notice, this list of conditions and the following disclaimer.
       *
       * - Redistributions in binary form must reproduce the above copyright
       * notice, this list of conditions and the following disclaimer in the
       * documentation and/or other materials provided with the distribution.
       *
       * - Neither the name of Oracle or the names of its
       * contributors may be used to endorse or promote products derived
       * from this software without specific prior written permission.
       *
       * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
       * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
       * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
       * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
       * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
       * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
       * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
       * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
       * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
       * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
       * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       */

      // package components;

      /* TextDemo.java requires no other files. */

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

      public class TextDemo extends JPanel implements ActionListener {
          protected JTextField textField;
          protected JTextArea textArea;
          private final static String newline = "\n";

          public TextDemo() {
              super(new GridBagLayout());

              textField = new JTextField(20);
              textField.addActionListener(this);

              textArea = new JTextArea(5, 20);
              textArea.setEditable(false);
              JScrollPane scrollPane = new JScrollPane(textArea);

              //Add Components to this panel.
              GridBagConstraints c = new GridBagConstraints();
              c.gridwidth = GridBagConstraints.REMAINDER;

              c.fill = GridBagConstraints.HORIZONTAL;
              add(textField, c);

              c.fill = GridBagConstraints.BOTH;
              c.weightx = 1.0;
              c.weighty = 1.0;
              add(scrollPane, c);
          }

          public void actionPerformed(ActionEvent evt) {
              String text = textField.getText();
              textArea.append(text + newline);
              textField.selectAll();

              //Make sure the new text is visible, even if there
              //was a selection in the text area.
              textArea.setCaretPosition(textArea.getDocument().getLength());
          }

          /**
           * Create the GUI and show it. For thread safety,
           * this method should be invoked from the
           * event dispatch thread.
           */
          private static void createAndShowGUI() {
              //Create and set up the window.
              JFrame frame = new JFrame("TextDemo");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

              //Add contents to the window.
              frame.add(new TextDemo());

              //Display the window.
              frame.pack();
              frame.setVisible(true);
          }

          public static void main(String[] args) {
              //Schedule a job for the event dispatch thread:
              //creating and showing this application's GUI.
              javax.swing.SwingUtilities.invokeLater(new Runnable() {
                  public void run() {
                      createAndShowGUI();
                  }
              });
          }
      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Focus can be restored by clicking on the Java dock icon to switch applications instead of clicking directly on the Java window

            achung Alisen Chung
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: