【问题标题】:Could not load JIntellitype.dll from local file system or from inside JAR无法从本地文件系统或 JAR 内部加载 JIntellitype.dll
【发布时间】:2017-02-17 12:07:43
【问题描述】:

我正在尝试使用 JIntellitype 来收听全局热键,但出现此错误:

线程“main”中的异常 com.melloware.jintellitype.JIntellitypeException:无法加载 来自本地文件系统或 JAR 内部的 JIntellitype.dll com.melloware.jintellitype.JIntellitype.(JIntellitype.java:114) 在 com.melloware.jintellitype.JIntellitype.getInstance(JIntellitype.java:177) 在 utils.HotKey.(HotKey.java:19) 在 ui.Main.Catch_Hotkeys(Main.java:78) 在 ui.Main.(Main.java:20) 在 ui.Main.main(Main.java:15) 引起:java.io.IOException: FromJarToFileSystem 无法加载 DLL: com/melloware/jintellitype/JIntellitype.dll 在 com.melloware.jintellitype.JIntellitype.fromJarToFs(JIntellitype.java:150) 在 com.melloware.jintellitype.JIntellitype.(JIntellitype.java:105) ... 5 更多原因:java.lang.NullPointerException at com.melloware.jintellitype.JIntellitype.fromJarToFs(JIntellitype.java:146) ... 6 更多

我已经加载了 jar 文件,并且我还通过引用的库指向了 dll 所在的文件夹。

这是我要运行的代码:

import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.IntellitypeListener;
import com.melloware.jintellitype.JIntellitype;

public class HotKey extends Thread implements HotkeyListener, IntellitypeListener {

    private final int CTRL_C_SHIFT = 10;

    public HotKey()
    {
      JIntellitype.getInstance().unregisterHotKey(CTRL_C_SHIFT);
      JIntellitype.getInstance().registerHotKey(CTRL_C_SHIFT, JIntellitype.MOD_CONTROL  + (int)'C',  JIntellitype.MOD_SHIFT);

      if (!JIntellitype.isJIntellitypeSupported()) 
      {
         System.exit(1);
      }
    }

    @Override
    public void onIntellitype(int arg0) 
    {

    }

    @Override
    public void onHotKey(int key) 
    {
         if (key == CTRL_C_SHIFT)
         {
             System.out.println("smg");
         }
    }


}  

知道如何解决这个问题吗?

【问题讨论】:

    标签: java dll jintellitype


    【解决方案1】:

    您的问题将由于该操作系统版本和 JRE 版本之间的版本问题而发生。

    你应该检查:

    1. 是否在您的操作系统系统文件夹中安装了适当的 dll 文件。 JIntellitype包有两个dll文件,一个用于32位操作系统,一个用于64位操作系统,它们的名称不同。

    2. 在项目的属性中检查您的 Java 平台版本。 如果 JDK 的类型不止一种,您可以尝试更改 Java 平台。 确定哪个是 64 位或 32 位版本。

    祝你好运!

    【讨论】:

    • 另外,在第 1 种情况下,您应该将 dll 文件名更改为类似于“JIntellitype.dll”,即使选择哪个。
    【解决方案2】:

    我建议你这样做:

         try
         {
            JIntellitype.getInstance().unregisterHotKey(CTRL_C_SHIFT);
            MyHotKeyListener hotKeyListener = new MyHotKeyListener();
            hotKeyListener.addObserver(new MyEventListener());
            JIntellitype.getInstance().addHotKeyListener(hotKeyListener);
            JIntellitype.getInstance().registerHotKey(CTRL_C_SHIFT, JIntellitype.MOD_CONTROL  + (int)'C',  JIntellitype.MOD_SHIFT);
         }
         catch (JIntellitypeException je)
         {
            logger.warn("JIntellitype initialization failed.");
            // DO WHATEVER (NOTIFY USERS?)
         }
    

    我可以指出其他线程,包括该库的创建者本人否认该库存在问题的线程。但是,像我这样的许多用户不时会遇到 JIntellitype 无法初始化的此类问题,唯一的解决方案是重新启动计算机。因此,您应该捕获 JIntellitype 异常(库抛出的唯一异常)并警告用户(通过对话框窗口)热键注册失败。您应该让他们选择在没有他们的情况下继续,或者重新启动计算机并重试。

    相信我.... 除非这是一个持续存在的问题(这意味着您的配置不正确),否则它是您最好的选择。这将不时随机发生。

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2017-06-08
      • 2021-12-23
      • 2013-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多