2017-02-17 99 views
0

我试图用JIntellitype听全局热键加载JIntellitype.dll但我得到这个错误:无法从本地文件系统或从内部JAR

Exception in thread "main" com.melloware.jintellitype.JIntellitypeException: Could not load JIntellitype.dll from local file system or from inside JAR at com.melloware.jintellitype.JIntellitype.(JIntellitype.java:114) at com.melloware.jintellitype.JIntellitype.getInstance(JIntellitype.java:177) at utils.HotKey.(HotKey.java:19) at ui.Main.Catch_Hotkeys(Main.java:78) at ui.Main.(Main.java:20) at ui.Main.main(Main.java:15) Caused by: java.io.IOException: FromJarToFileSystem could not load DLL: com/melloware/jintellitype/JIntellitype.dll at com.melloware.jintellitype.JIntellitype.fromJarToFs(JIntellitype.java:150) at com.melloware.jintellitype.JIntellitype.(JIntellitype.java:105) ... 5 more Caused by: java.lang.NullPointerException at com.melloware.jintellitype.JIntellitype.fromJarToFs(JIntellitype.java:146) ... 6 more

我已加载的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"); 
     } 
    } 


} 

任何想法如何解决这一问题?

回答

0

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

您应该检查:

  1. 是否相应的DLL文件被安装在您的操作系统的系统文件夹。 JIntellitype软件包有两个dll文件,一个用于32位操作系统,另一个用于64位操作系统,它们有不同的名称。

  2. 检查项目属性中的Java平台版本。 如果存在多种类型的JDK,则可以尝试更改Java平台。 确定哪个适用于64位或32位版本。

祝你好运!

+0

此外,在第1种情况下,即使选择哪一个,也应该将dll文件名更改为“JIntellitype.dll”。 –

0

我建议你做这样的事情:

 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异常(库引发的唯一异常)并警告用户(通过对话窗口)该热键未能注册。您应该让他们选择在没有他们的情况下继续,或重新启动计算机并再次尝试。

相信我....除非这是一个常见问题(这意味着你配置不正确),它是你最好的选择。这将随时随地发生。

相关问题