ResourceBundle i plik *.properties

1

Witam,

mam problem z pobraniem pliku *.properties. Próbowałem już dziesiątki rozwiązań ze SO ale żadne nie działa. Nie mam pojęcia co może nie grać. Drzewo projektu:

server
├─ .vscode
│  └─ settings.json
├─ pom.xml
├─ src
│  ├─ main
│  │  ├─ java
│  │  │  └─ pw
│  │  │     ├─ Config.java
│  │  │     ├─ GameEventHandler.java
│  │  │     ├─ GameManager.java
│  │  │     ├─ GameResponseDispatcher.java
│  │  │     ├─ GameServerInitializer.java
│  │  │     ├─ GameServerMain.java
│  │  │     ├─ HttpRequestHandler.java
│  │  │     ├─ LoggerManager.java
│  │  │     ├─ Player.java
│  │  │     ├─ TextWebSocketFrameHandler.java
│  │  │     └─ WebSocketServer.java
│  │  └─ resources
│  │     ├─ configuration.properties
│  │     └─ logger.properties
│  └─ test
│     └─ java
│        └─ pw
│           └─ AppTest.java
└─ target

Tutaj kod w którym wykorzystuję ResourceBundle

package pw;

import java.util.ResourceBundle;
import java.util.logging.Logger;
 
public class GameServerMain {
	private final static Logger LOG = LoggerManager.GetLogger(GameServerMain.class.getName());
	public static void main(String[] args) {
		 
		final ResourceBundle configurationBundle = ResourceBundle.getBundle("configuration");
		int port = Integer.valueOf(configurationBundle.getString("port"));
		WebSocketServer pWebSocketServer = new WebSocketServer(); 
		pWebSocketServer.start(port);
		LOG.info("Server started");		
	}
}

I stacktrace:

Exception in thread "main" java.lang.ExceptionInInitializerError
        at pw.GameServerMain.<clinit>(GameServerMain.java:7)
Caused by: java.lang.NullPointerException: inStream parameter is null
        at java.base/java.util.Objects.requireNonNull(Objects.java:246)
        at java.base/java.util.Properties.load(Properties.java:407)
        at java.logging/java.util.logging.LogManager.readConfiguration(LogManager.java:1579)
        at pw.LoggerManager.<clinit>(LoggerManager.java:18)
        ... 1 more

Możecie mi proszę podpowiedzieć jak się z tym uporać i poprawnie załadować plik properties? Będę bardzo wdzięczny za pomoc.

0

Tylko że exception jest z LoggerManagera a nie z ResourceBundle XD

Z ResourceBundle byłby np taki bug:

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name configuration, locale en_US
	at java.base/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2045)
	at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1683)
	at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1586)
	at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1549)
	at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:858)
	at GameServerMain.main(GameServerMain.java:7)
0

Oczywiście, przepraszam, nie zamieściłem LoggerManagera, jak poniżej:

package pw;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;
import java.util.logging.Logger;

public class LoggerManager {
	private static final LogManager logManager = LogManager.getLogManager();

    /*
     * Java static block always loads before constructors
     */
    static {
        try {
            InputStream inputStream =  ClassLoader.class.getResourceAsStream("logger.properties");

            logManager.readConfiguration(inputStream);

        } catch (IOException exception) {
            exception.printStackTrace();
        }
    }
    
    public static Logger GetLogger(String str)
    {
    	return Logger.getLogger(str);
    }
}

Dodatkowo jeszcze POM.xml :

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>pw</groupId>
  <artifactId>server</artifactId>
  <version>1.0</version>

  <name>server</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
      <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.1.77.Final</version>
    </dependency>
    <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20190722</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.7.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-project-info-reports-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.7</version>
            <configuration>
             <encoding>${project.encoding}</encoding>
            </configuration>
            </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>
2

Hm, to chyba bardziej powinien być InputStream inputStream = LoggerManager.class.getResourceAsStream("logger.properties"); Czyli klasa z tego samego Jara gdzie masz zasób logger.properties

0
KamilAdam napisał(a):

Hm, to chyba bardziej powinien być InputStream inputStream = LoggerManager.class.getResourceAsStream("logger.properties"); Czyli klasa z tego samego Jara gdzie masz zasób logger.properties

Nie zadziałało, ale InputStream inputStream = LoggerManager.class.getClassLoader().getResourceAsStream("logger.properties"); już tak, dzięki za naprowadzenie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1