pyNetLogo icon indicating copy to clipboard operation
pyNetLogo copied to clipboard

Improve search for `JAVA_HOME` on Windows

Open EwoutH opened this issue 1 year ago • 0 comments

On 64-bit Windows, NetLogo is installed by default in "C:\Program Files\NetLogo 6.3.0". A Java jvm.dll is with it, located in "C:\Program Files\NetLogo 6.3.0\runtime\bin\server\jvm.dll".

Using pynetlogo on Windows, this jvm.dll isn't found by default. If pynetlogo could look there before throwing an error.

No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly.
Traceback (most recent call last):
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\ema_workbench\em_framework\experiment_runner.py", line 91, in run_experiment
    model.run_model(scenario, policy)
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\ema_workbench\util\ema_logging.py", line 152, in wrapper
    res = func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\ema_workbench\em_framework\model.py", line 299, in run_model
    super().run_model(scenario, policy)
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\ema_workbench\util\ema_logging.py", line 152, in wrapper
    res = func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\ema_workbench\em_framework\model.py", line 181, in run_model
    self.model_init(policy)
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\ema_workbench\util\ema_logging.py", line 152, in wrapper
    res = func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\ema_workbench\connectors\netlogo.py", line 134, in model_init
    self.netlogo = pynetlogo.NetLogoLink(
                   ^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\pynetlogo\core.py", line 188, in __init__
    jvm_path = jpype.getDefaultJVMPath()
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\jpype\_jvmfinder.py", line 74, in getDefaultJVMPath
    return finder.get_jvm_path()
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Ewout\AppData\Local\Programs\Python\Python311\Lib\site-packages\jpype\_jvmfinder.py", line 212, in get_jvm_path
    raise JVMNotFoundException("No JVM shared library file ({0}) "
jpype._jvmfinder.JVMNotFoundException: No JVM shared library file (jvm.dll) found. Try setting up the JAVA_HOME environment variable properly.

The current workaround is adding:

import os
os.environ["JAVA_HOME"] = 'C:/Program Files/NetLogo 6.3.0/runtime/bin/server/'

EwoutH avatar Apr 07 '23 11:04 EwoutH