Alternate technique using JTextArea which works as expected on macOS:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.DefaultCaret;
import processing.serial.*;
javax.swing.JFrame frame;
java.awt.Canvas canvas;
JTextArea txtArea;
Serial myPort;
int _wndW = 300;
int _wndH = 620;
void setup() {
frame = (javax.swing.JFrame) ((processing.awt.PSurfaceAWT.SmoothCanvas) surface.getNative()).getFrame();
canvas = (processing.awt.PSurfaceAWT.SmoothCanvas) ((processing.awt.PSurfaceAWT)surface).getNative();
frame.setBounds(500, 300, _wndW, _wndH);
frame.remove(canvas);
txtArea = new JTextArea();
JScrollPane scrlPane = new JScrollPane(txtArea);
scrlPane.setBounds(10, 10, 200, _wndH - 50);
frame.add(scrlPane);
txtArea.setEditable(true);
txtArea.setLineWrap(false);
txtArea.setWrapStyleWord(true);
txtArea.repaint();
printArray(Serial.list());
String portName = Serial.list()[1]; // Adjust this if necessary
myPort = new Serial(this, portName, 115200);
DefaultCaret caret = (DefaultCaret)txtArea.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
}
void serialEvent(Serial myPort) {
String inData = myPort.readStringUntil('\n');
if (inData != null) {
txtArea.append(inData);
}
}
void draw() {
}