NetBeans could not start due to wrong JVM version, incompatible library and missing files

NetBeans could not start on a Xubuntu Linux system.

It displayed a splash screen, wrote the message Initializing for a few seconds and then quit.

 

The original distribution was Xubuntu 16.04 LTS which had been updated to Xubuntu 18.04 LTS.

Tried starting NetBeans from terminal and got these warnings:

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.netbeans.ProxyURLStreamHandlerFactory (file:/usr/share/netbeans/platform18/lib/boot.jar) to field java.net.URL.handler
WARNING: Please consider reporting this to the maintainers of org.netbeans.ProxyURLStreamHandlerFactory
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release

 

Decided to check the startup activity with:

strace netbeans 2> netbeans_strace.txt

Noticed that NetBeans was looking for configuration files in 3 locations:

stat("/usr/share/netbeans/8.1/etc/netbeans.conf", {st_mode=S_IFREG|0644, st_size=2958, ...}) = 0
stat("/etc/netbeans.conf", {st_mode=S_IFREG|0644, st_size=2958, ...}) = 0
stat("~/.netbeans/8.1/etc/netbeans.conf", 0x7ffc7aae8df0) = -1 ENOENT (No such file or directory)

 

Decided to look for other files under: ~/.netbeans/8.1/

Found log files under: ~/.netbeans/8.1/var/log/

Part of: ~/.netbeans/8.1/var/log/messages.log

Product Version = NetBeans IDE 8.1 (Build 20180221-debian-8.1)
Java Home = /usr/lib/jvm/java-11-openjdk-amd64
...
-------------------------------------------------------------------------------
java.lang.SecurityException: setContextClassLoader
at java.base/jdk.internal.misc.InnocuousThread.setContextClassLoader(InnocuousThread.java:116)
...

 

Discovered that NetBeans 8.1 requires JDK 8.

Found JDK 8 under:

/usr/lib/jvm/java-8-openjdk-amd64/

Created the folder:

~/.netbeans/8.1/etc/

Then created the configuration file:

~/.netbeans/8.1/etc/netbeans.conf

With a single line:

netbeans_jdkhome="/usr/lib/jvm/java-8-openjdk-amd64"

 

This seemed to help somewhat, because the splash screen continued until:

Turning on modules…

But then it quit again…

 

Found and examined: ~/.netbeans/8.1/var/log/messages.log

Noticed this part:

Product Version = NetBeans IDE 8.1 (Build 20180221-debian-8.1)
Java Home = /usr/lib/jvm/java-8-openjdk-amd64/jre
...
-------------------------------------------------------------------------------
INFO [org.netbeans.modules.netbinox]: Install area set to file:/usr/share/netbeans/8.1/
java.lang.NullPointerException
at org.eclipse.osgi.baseadaptor.BaseAdaptor.initializeStorage(BaseAdaptor.java:123)
at org.eclipse.osgi.framework.internal.core.Framework.<init>(Framework.java:192)
at org.eclipse.osgi.framework.internal.core.EquinoxLauncher.internalInit(EquinoxLauncher.java:67)
at org.eclipse.osgi.framework.internal.core.EquinoxLauncher.init(EquinoxLauncher.java:37)
at org.eclipse.osgi.launch.Equinox.init(Equinox.java:178)
at org.netbeans.modules.netbinox.Netbinox.init(Unknown Source)
at org.netbeans.core.netigso.Netigso.prepare(Unknown Source)
at org.netbeans.NetigsoHandle.turnOn(Unknown Source)
at org.netbeans.ModuleManager.enable(Unknown Source)
INFO [null]: Last record repeated again.
at org.netbeans.core.startup.ModuleList.installNew(Unknown Source)
at org.netbeans.core.startup.ModuleList.trigger(Unknown Source)
at org.netbeans.core.startup.ModuleSystem.restore(Unknown Source)
at org.netbeans.core.startup.Main.getModuleSystem(Unknown Source)
INFO [null]: Last record repeated again.
at org.netbeans.core.startup.Main.start(Unknown Source)
at org.netbeans.core.startup.TopThreadGroup.run(Unknown Source)
at java.lang.Thread.run(Thread.java:748)

 

Found this site, which seemed to describe this part of the problem:

https://bugs.launchpad.net/ubuntu/+source/netbeans/+bug/1776937

 

Checked the installed version of libequinox-osgi-java which was: 3.9.1-1

Downloaded: libequinox-osgi-java_3.8.1-10_all.deb

From: https://packages.ubuntu.com/artful/all/libequinox-osgi-java/download

 

Installed the package with:

sudo dpkg -i libequinox-osgi-java_3.8.1-10_all.deb

Held the package at the old version with:

sudo apt-mark hold libequinox-osgi-java

 

Tried starting NetBeans again, but it still failed to start.

Found errors in: ~/.netbeans/8.1/var/log/messages.log

Like:

!ENTRY org.eclipse.osgi 4 0 2018-10-15 22:49:29.510
!MESSAGE Error reading configuration: Unable to create lock manager.
!STACK 0
java.io.IOException: Unable to create lock manager.
at org.eclipse.osgi.storagemanager.StorageManager.open(StorageManager.java:699)

 

Tried running NetBeans as root with:

sudo netbeans

It started up without crashing…

 

It was still unable to start under the regular user account.

Noticed that it had created some files with root as owner:

!ENTRY org.eclipse.osgi 4 0 2018-10-15 23:05:36.425
!MESSAGE Error reading configuration: Permission denied
!STACK 0
java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:2024)
at org.eclipse.osgi.storagemanager.StorageManager.initializeInstanceFile(StorageManager.java:188)

 

Decided to change the file permissions with:

sudo chown $USER:$USER ~/.netbeans/ -R

sudo chown $USER:$USER ~/.cache/netbeans/ -R

 

This was the last step. After this NetBeans could finally start normally again.

Conclusion

If NetBeans fails to start on Ubuntu/Xubuntu 18.4 LTS try these things:

  • Check and change used JDK to version 8.
  • Downgrade libequinox-osgi-java package from 3.9.1-1 to 3.8.1-10 and hold/pin it.
  • Run NetBeans as root once.
  • Change NetBeans file permissions to normal user permissions.