Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MacOS Catalina] NPE: Couldn't execute theme name query with the Os #18

Open
DrDaleks opened this issue Oct 23, 2021 · 15 comments
Open

Comments

@DrDaleks
Copy link

DrDaleks commented Oct 23, 2021

Hi,
Just noticed this NPE, wondered if this is normal or an OS-related issue somehow.
My code calls OsThemeDetector.getDetector().isDark() at some point, and the full stack trace reads

[AWT-EventQueue-0] ERROR com.jthemedetecor.MacOSThemeDetector - Couldn't execute theme name query with the Os
java.lang.NullPointerException
	at java.base/java.util.regex.Matcher.getTextLength(Matcher.java:1770)
	at java.base/java.util.regex.Matcher.reset(Matcher.java:416)
	at java.base/java.util.regex.Matcher.<init>(Matcher.java:253)
	at java.base/java.util.regex.Pattern.matcher(Pattern.java:1133)
	at com.jthemedetecor.MacOSThemeDetector.isDarkTheme(MacOSThemeDetector.java:96)
	at com.jthemedetecor.MacOSThemeDetector.isDark(MacOSThemeDetector.java:86)

More specifically, the NPE is due to the following call (within the isDark() method) returning the '0' byte:

Foundation.invoke(userDefaults, "objectForKey:", Foundation.nsString("AppleInterfaceStyle"))

I should mention that this happens during daytime (and luckily isDark() returns false), so no harm done (besides an avoidable(?) pollution of the logger)

Any clue where that might come from?

In case this helps: using version 3.7 @ openjdk11 @ macOS 10.15.7

@rosamarco
Copy link

rosamarco commented Dec 15, 2021

Got the same error on Monterey 12.1
image

@peavers
Copy link

peavers commented Dec 21, 2021

Also facing same error on Monterey 12.1

@ctipper
Copy link

ctipper commented Jan 7, 2022

+1 Big Sur, JDK 17
I wonder if the matcher pattern catches the case where system Auto theme is set

@ctipper
Copy link

ctipper commented Jan 7, 2022

Developer seems to have explored this issue:

For working with the new macOS Catalina you need to combine AppleInterfaceStyle with this new value introduced AppleInterfaceStyleSwitchesAutomatically

https://stackoverflow.com/a/57429660

with a reference to https://github.com/ruiaureliano/macOS-Appearance

with apologies for possible impertinence

@ctipper
Copy link

ctipper commented Apr 9, 2022

This library would be useful if this issue were fixed. With reference to the example project referenced above the developer quietly updated his project with the correct property for macOS > 10.15 NSApplication.shared.effectiveAppearance.debugDescription A potential PR would need to check platform version.

https://github.com/ruiaureliano/macOS-Appearance/../AppDelegate.swift#L50

@mgroth0
Copy link

mgroth0 commented May 21, 2022

In the meantime, does anyone know how to silence the logger?

I don't fully understand how the logger works. I've tried using

java.util.logging.Logger.getLogger("com.jthemedetecor.MacOSThemeDetector").level = Level.OFF
	java.util.logging.Logger.getLogger("com.jthemedetecor").level = Level.OFF

in my code, but that does nothing.

Whenever I search "how to disable a org.slf4j.Logger" people are talking about things like log4j. It's very confusing. I don't think I have log4j installed, but just in case I tried adding a "log4j.properties" to my classpath with log4j.logger.com.jthemedetecor=OFF but that is not doing anything either.

@ctipper
Copy link

ctipper commented May 22, 2022

It sounds like you don't want logging at all, in which case you should add sl4j-nop (no-op) logger to your dependencies. I only know log4j with that if you have a logging configuration (log4j2.xml) on your classpath it should ignore libraries that are not configured. This library uses logback with sl4j I have no knowledge of that but it shouldn't matter if you are not using it.

@mgroth0
Copy link

mgroth0 commented May 23, 2022

But what if I just want to disable logging for jthemedetecor without disabling logging for other libraries?

@ctipper
Copy link

ctipper commented May 23, 2022 via email

@nybbs2003
Copy link

12.4 JDK18 same thing

@nybbs2003
Copy link

In the meantime, does anyone know how to silence the logger?

I don't fully understand how the logger works. I've tried using

java.util.logging.Logger.getLogger("com.jthemedetecor.MacOSThemeDetector").level = Level.OFF
	java.util.logging.Logger.getLogger("com.jthemedetecor").level = Level.OFF

in my code, but that does nothing.

Whenever I search "how to disable a org.slf4j.Logger" people are talking about things like log4j. It's very confusing. I don't think I have log4j installed, but just in case I tried adding a "log4j.properties" to my classpath with log4j.logger.com.jthemedetecor=OFF but that is not doing anything either.

use the following two lines in log4j2.properties

logger.jthemedetecor.name = com.jthemedetecor
logger.jthemedetecor.level = off

reference

@vewert
Copy link

vewert commented Jan 18, 2023

In the meantime, does anyone know how to silence the logger?
I don't fully understand how the logger works. I've tried using

java.util.logging.Logger.getLogger("com.jthemedetecor.MacOSThemeDetector").level = Level.OFF
	java.util.logging.Logger.getLogger("com.jthemedetecor").level = Level.OFF

in my code, but that does nothing.
Whenever I search "how to disable a org.slf4j.Logger" people are talking about things like log4j. It's very confusing. I don't think I have log4j installed, but just in case I tried adding a "log4j.properties" to my classpath with log4j.logger.com.jthemedetecor=OFF but that is not doing anything either.

use the following two lines in log4j2.properties

logger.jthemedetecor.name = com.jthemedetecor
logger.jthemedetecor.level = off

reference

In case anyone is using log4j2.xml style properties you can use this:

<Loggers>
    <Logger name="com.jthemedetecor" level="error">
    </Logger>
    <Root level="info">
      ...
    </Root>
</Loggers>

@Wandmalfarbe
Copy link

This issue seems to be partially solved by #30, but the fix is currently unreleased.

@Siedlerchr
Copy link

Having the same issue, any news on this? Using ventura


RROR: Couldn't execute theme name query with the Os: java.lang.NullPointerException: Cannot invoke "java.lang.CharSequence.length()" because "this.text" is null
	at java.base/java.util.regex.Matcher.getTextLength(Matcher.java:1808)
	at java.base/java.util.regex.Matcher.reset(Matcher.java:461)
	at java.base/java.util.regex.Matcher.<init>(Matcher.java:256)
	at java.base/java.util.regex.Pattern.matcher(Pattern.java:1180)
	at com.jthemedetector/com.jthemedetecor.MacOSThemeDetector.isDarkTheme(MacOSThemeDetector.java:96)
	at com.jthemedetector/com.jthemedetecor.MacOSThemeDetector.isDark(MacOSThemeDetector.java:86)
	at org.jabref@100.0.0/org.jabref.gui.theme.ThemeManager.updateThemeSettings(ThemeManager.java:81) 

@ctipper
Copy link

ctipper commented Nov 11, 2023

PSA for anyone here the project is hosted by jitpack.io from which you can get dependency from latest commit for example, not just the releases.

https://jitpack.io/#Dansoftowner/jSystemThemeDetector

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants