Serial library not found - Processing 4.4.8

So, where’s the Serial library? I feel like I’m crazy.

When I download Processing and then install it, there’s no Serial library available.

So I though I had to install it, but it doesn’t appear on the included manager. There’s no information online, and I can’t find a .jar.

It still appears on the github, but again, no separate jar, so I assume the intention is for it to be built in.

It still appears when searched on the processing reference, but there’s no mention of how to download it or if it’s been removed. It appears as if it’s part of the ‘core’ Processing, but it doesn’t appear on the main page.

1 Like

*** UPDATE ***

*** ORIGINAL POST ***

Hello @Kittycannon ,

You are not! I can confirm this for the zip install. :)

My environment:

  • W10
  • A manual install of Processing from the portable zip file so I have the last version available to fall back to if required.
  • Rename the Processing install folder and add the version number to the folder name.

The serial.jar is missing from Processing 4.4.8:

The serial.jar is available with Processing 4.4.7:

I put the Serial JARs from Processing 4.4.7 in my sketch folder and it worked:
Libraries - Happy Coding

It is also missing in examples:

It is also missing in the Menu Bar in Sketch > Import Library…

I also tried to copy the Serial library from Processing 4.4.7 to the Libraries folder in the Sketchbook Folder and that worked. Restart Processing after adding the library.

You can find the JARs and extract them from the zip file:
Releases · processing/processing4 · GitHub
Go to Processing 4.4.7 > Assets > Find the portable zip version

Workarounds Proceed with Caution !

These are workarounds only for Processing 4.4.8 until there is an update and for the serial library issue only.

You may introduce other issues when introducing workarounds.
This has happened to me in the past!

Proceed with caution and only if you are confident in what you are doing.

Experience has helped me navigate issues and find solutions and workarounds.

The serial library has not changed that I am aware of and can be copied from the last version to replace the missing one.

:)

A solution is in the works:

https://github.com/processing/processing4/issues < Search for serial here.

Thanks @stefterv

:)

Oh Thanks, now these error is clear but a new one is in my window:

The package “javax.xml.bind” does not exist. You might be missing a library.

Is there also an solution for this error?

Thanks

Hello @Bua,

Welcome!

Please read Guidelines here:
Welcome to the Processing Foundation Discourse

Please include some minimal code to that will generate this error.

Processing 4.4.7 import menu:

Processing 4.4.8 import menu:

The above suggests that there may be more missing from Processing 4.4.8 than just the Serial Library.

This confirms it:

I am optimistic that there will be an update soon.

Code for above:

import processing.serial.*;
import processing.pdf.*;
import processing.net.*;
import processing.io.*;
import processing.dxf.*;

void setup()
  {
  }
  
void draw()
  {
  }

Please start another topic if it is not related to the serial library.

:)

import processing.io.*;

/* Copyright 2021 Google LLC. Bose All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the “License”);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an “AS IS” BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

*/

/*
NOTE: To enable quicker prototyping the websocket connection is
not limited by any authorization systems - please use responsibly
and implement a more robust authorization infrastructure for any
sensitive applications containing private data.
*/

import processing.serial.;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import websockets.
;
import javax.xml.bind.DatatypeConverter;
import controlP5.;
import java.util.
;

Serial myPort;
WebsocketServer ws;

// must match resolution used in the sketch
final int cameraWidth = 96;
final int cameraHeight = 96;
final int cameraBytesPerPixel = 1;
final int bytesPerFrame = cameraWidth * cameraHeight * cameraBytesPerPixel;

PImage myImage;
byte frameBuffer = new byte[bytesPerFrame];
String portNames;
ControlP5 cp5;
ScrollableList portsList;
boolean clientConnected = false;

void setup()
{
size(448, 224);
pixelDensity(displayDensity());
frameRate(30);
cp5 = new ControlP5(this);
portNames = Serial.list();
portNames = filteredPorts(portNames);
ws = new WebsocketServer(this, 8889, “/”);
portsList = cp5.addScrollableList(“portSelect”)
.setPosition(235, 10)
.setSize(200, 220)
.setBarHeight(40)
.setItemHeight(40)
.addItems(portNames);

portsList.close();
// wait for full frame of bytes
//myPort.buffer(bytesPerFrame);
myPort = new Serial(this, “COM19”, 115200);
//myPort = new Serial(this, “/dev/ttyACM0”, 9600);
//myPort = new Serial(this, “/dev/cu.usbmodem14201”, 9600);

myImage = createImage(cameraWidth, cameraHeight, RGB);
noStroke();
}

void draw()
{
background(240);
image(myImage, 0, 0, 224, 224);

drawConnectionStatus();
}

void drawConnectionStatus() {
fill(0);
textAlign(RIGHT, CENTER);
if (!clientConnected) {
text(“Not Connected to TM”, 410, 100);
fill(255, 0, 0);
} else {
text(“Connected to TM”, 410, 100);
fill(0, 255, 0);
}
ellipse(430, 102, 10, 10);
}
void portSelect(int n) {
String selectedPortName = (String) cp5.get(ScrollableList.class, “portSelect”).getItem(n).get(“text”);

try {
myPort = new Serial(this, selectedPortName, 115200);
myPort.buffer(bytesPerFrame);
}
catch (Exception e) {
println(e);
}
}

boolean stringFilter(String s) {
return (!s.startsWith(“/dev/tty”));
}
int lastFrame = -1;
String filteredPorts(String ports) {
int n = 0;
for (String portName : ports) if (stringFilter(portName)) n++;
String retArray = new String[n];
n = 0;
for (String portName : ports) if (stringFilter(portName)) retArray[n++] = portName;
return retArray;
}

void serialEvent(Serial myPort) {
// read the saw bytes in
myPort.readBytes(frameBuffer);
//println(frameBuffer);

// access raw bytes via byte buffer
ByteBuffer bb = ByteBuffer.wrap(frameBuffer);
bb.order(ByteOrder.BIG_ENDIAN);
int i = 0;

while (bb.hasRemaining()) {
//0xFF & to treat byte as unsigned.
int r = (int) (bb.get() & 0xFF);
myImage.pixels[i] = color(r, r, r);
i++;
//println(“adding pixels”);
}
if (lastFrame == -1) {
lastFrame = millis();
}
else {
int frameTime = millis() - lastFrame;
print("fps: ");
println(frameTime);
lastFrame = millis();
}

myImage.updatePixels();
myPort.clear();
String data = DatatypeConverter.printBase64Binary(frameBuffer);
ws.sendMessage(data);
}

void webSocketServerEvent(String msg) {
if (msg.equals(“tm-connected”)) clientConnected = true;
}

TL; DR, and for people looking for a solution: Downgrade to 4.4.7

Thank you so much everyone and specially you @glv.

Downgrading to 4.4.7 solved the issue, and I have not found any other.

Maybe they forgot to add the library in the final build of 4.4.8?

It’s the first time I found a live bug, and haha it took me by surprise.

Cheers.

2 Likes

Hello again!

I always do a manual install from the portable.zip version and rename the folders:

I always have the last working version to work with if there are issues.

:)

Processing 4.4.10 corrects issues.

:)

1 Like