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

[macos] Displaying a dialog causes CATransaction synchronize errors on macOS 13

XMLWordPrintable

      ADDITIONAL SYSTEM INFORMATION :
      My configuration: MacOS 13.0.1 (Ventura); IntelliJ Community Edition 2021.2; JDK 15.0.2; JavaFX 15.0.1+1
      (Sharing this problem on StackOverflow, another user reported the same problem with: OS X (intel) 13.0.1; JavaFX 19; OpenJDK 19.0.1)

      I've been using the same JDK and JavaFX versions for months without this problem. I recently upgraded to Ventura; the problem did not occur before then. Is the error on account of upgrading to Ventura? I don't know.

      A DESCRIPTION OF THE PROBLEM :
      Displaying a dialog box causes multiple errors to be displayed: "Error: <date> <time> java[1066:41315] +[CATransaction synchronize] called within transaction"


      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      Create a JavaFX project with the code shown below in 'Source code for an executable test case'
      Build
      Run the program from within IntelliJ, and click on the 'Process File' button. A FileChooser dialog will be displayed, and multiple error messages shown at the console.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      The dialog should be displayed, but with no error messages in the console.

      ACTUAL -
      The dialog is displayed, but this text is displayed in red in the console.
      2022-12-29 07:07:14.900 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:14.927 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:14.980 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:14.993 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.010 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.027 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.045 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.060 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.077 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.094 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.110 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.128 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.142 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.160 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:15.208 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:17.535 java[1135:46462] +[CATransaction synchronize] called within transaction
      2022-12-29 07:07:48.991 java[1135:46462] +[CATransaction synchronize] called within transaction

      ---------- BEGIN SOURCE ----------
      Code used:
      =========
      import javafx.application.Application;
      import javafx.scene.Scene;
      import javafx.scene.control.Button;
      import javafx.scene.layout.VBox;
      import javafx.stage.FileChooser;
      import javafx.stage.Stage;

      import java.io.*;

      public class Main extends Application {

          // ..................... and now it's time for the main routine .....................

          @Override
          public void start(Stage primaryStage) {

              // we need a FileChooser
              FileChooser myChooser = new FileChooser();

              // set up a controlled exit
              primaryStage.setOnCloseRequest(e -> {
                  e.consume();
                  primaryStage.close();
              });

              // define the main scene's building blocks
              VBox root = new VBox(5); // the spacing is between each element in the VBox
              Scene mainScene = new Scene(root, 650, 300);

              // just one button in the scene
              Button websiteSupportButton = new Button("Process file");
              websiteSupportButton.setMinWidth(150);
              root.getChildren().add(websiteSupportButton);
              websiteSupportButton.setOnAction(e -> processFiles(primaryStage, myChooser));

              // and now we're ready to associate the root Scene with the primary stage, and show it
              primaryStage.setX(20);
              primaryStage.setY(20);
              primaryStage.setScene(mainScene);
              primaryStage.setTitle("Error test");
              primaryStage.show();
          }

          // .................................. tool scenes ..................................

          // select an input file.
          private static void processFiles(Stage myStage, FileChooser myChooser) {
              File inputFile;

              // need to select an input file - displaying this dialog causes multiple "java[1334:69043] +[CATransaction synchronize] called within transaction" messages
              inputFile = myChooser.showOpenDialog(myStage);
              if (inputFile != null) {
                  System.out.println(" file processed");
              }
          }

          // .......................................... standard stuff ..........................................

          public static void main(String[] args) {
              launch(args);
          }
      }
      ---------- END SOURCE ----------

      FREQUENCY : always


            kcr Kevin Rushforth
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated: