无法加载系统游标:Centos 7上的Java中的CopyDrop.32x32异常

时间:2017-01-09 15:06:22

标签: java netbeans centos7

我在Centos 7上安装了netbeans 8.2。

我收到此错误:

java.lang.RuntimeException: failed to load system cursor: DnD.Cursor.CopyDrop : cannot load system cursor: CopyDrop.32x32
    at java.awt.dnd.DragSource.load(DragSource.java:135)
    at java.awt.dnd.DragSource.<clinit>(DragSource.java:148)

Java版:

openjdk version "1.8.0_111"
OpenJDK Runtime Environment (build 1.8.0_111-b15)
OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:5)

我在虚拟盒中遇到了Kali的问题。

如果您的操作系统位于virtualbox中,则该操作将关闭操作系统。

然后关闭&#34; 启用3D加速&#34;在机器下 - &gt;设置 - &gt; Dispaly。

启动您的操作系统并享受!

答案 1 :(得分:5)

似乎这个bug是用java 8u152 b05解决的。 以下代码传递了8u152,但使用Java 8u131抛出了上述异常:

public static void main(String[] args) {
    DragSource.getDefaultDragSource(); 
}

目前,“JDK 8更新早期访问构建”中提供了8u152: http://jdk.java.net/8/

答案 2 :(得分:2)

我的Java代码使用JTree中的Drag&amp; Drop,从CentOS 6升级到CentOS 7后会崩溃。相同的硬件,相同的OpenJDK,相同的Java代码,但不同的图形驱动程序。内核命令行设置的解决方法&#34; nomodeset&#34;有帮助,但导致图形和图形差闪烁。 这是一个纯Java解决方法:

  //workaround for used Drag&Drop cursors which are unsupported by graphics driver
  public static void initUnsupportedCursors() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException
  {
    String cursors[] = new String[]{
        "DnD.Cursor.CopyDrop",
        "DnD.Cursor.MoveDrop",
        "DnD.Cursor.LinkDrop",
        "DnD.Cursor.CopyNoDrop",
        "DnD.Cursor.MoveNoDrop",
        "DnD.Cursor.LinkNoDrop"
        };
   List <String> unsupportedCursors =  new ArrayList <String>(); 
   for (String c : cursors)
   {
     try
     {
       if (Toolkit.getDefaultToolkit().getDesktopProperty(c) == null)
       {
         throw new Exception("Can't find cursor " + c);
       }
     }
     catch (Exception e)
     {
       unsupportedCursors.add(c);
     }
   }
   if (!unsupportedCursors.isEmpty())
   {
     Field propsFiled = Toolkit.class.getDeclaredField("desktopProperties");
     propsFiled.setAccessible(true);
     Map props = (Map) propsFiled.get(Toolkit.getDefaultToolkit());
     for (String unsupportedCursor : unsupportedCursors)
     {
       System.out.println("Replacing unsupported " + unsupportedCursor + " by " + Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
       props.put(unsupportedCursor, Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
     }
   }
  }

答案 3 :(得分:1)

据报道这是一个错误:Bug 257554 - RuntimeException: failed to load system cursor: DnD.Cursor.CopyDrop : cannot load system cursor: CopyDrop.32x32

事实证明,它与Unity-Mir中报告的错误相关联:Java applications are missing X11 resources - XQueryBestCursor return 0,0

从评论中,JDK版本以及旧的XMir(不再支持)负责。 无论如何,它由最后的XMir版本修复。

  

这将是Java中的一个错误,它无法处理Xorg   软件光标。这真是一个与Mir无关的问题。我只是   将X置于触发错误的(有效)模式。

     

虽然,我们可以通过实现完整来解决Java错误   XMir中的硬件光标支持...

  

XMir 1.0(旧的Xorg扩展名)现已弃用,而不是   维持或固定。它被新的&#39; Xmir&#39;取代。二进制(包   &#39; xmir&#39;)在Ubuntu 15.10 wily中引入。

  

注意:新的Xmir使用硬件光标(如果可用的话)   桌面)。因此,如果这个bug仍然存在,它只会打开   移动(Android Mir平台)。

你应该考虑升级到&#34; new&#34;版本

答案 4 :(得分:1)

我找到了解决方案。

1-编辑以下文件:

nano /etc/default/grub 

2-将rhgb quiet替换为nomodeset

3-在终端grub2-mkconfig -o /boot/grub2/grub.cfg上运行

4-重启。

实际上这并没有解决问题。它只会忽略它。