Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing GUI在尝试实时更改GUI时引发异常_Java_Swing_Look And Feel - Fatal编程技术网

Java Swing GUI在尝试实时更改GUI时引发异常

Java Swing GUI在尝试实时更改GUI时引发异常,java,swing,look-and-feel,Java,Swing,Look And Feel,因此,我有一个swing GUI,在这里,我根据来自另一个GUI类的一些输入,使用如下内容更改它的默认外观: javax.swing.UIManager.setLookAndFeel("newlook&feel"); SwingUtilities.updateComponentTreeUI(this); pack(); 这很好,但在控制台上,我每次都会看到一个异常抛出,消息如下: Exception in thread "AWT-EventQueue-0" java.lang.Null

因此,我有一个swing GUI,在这里,我根据来自另一个GUI类的一些输入,使用如下内容更改它的默认外观:

javax.swing.UIManager.setLookAndFeel("newlook&feel");
SwingUtilities.updateComponentTreeUI(this);
pack();
这很好,但在控制台上,我每次都会看到一个异常抛出,消息如下:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
它指的是内部Java类类中的行号。这里可能有什么问题,或者我遗漏了什么

只是一点,在这个场景中,
SwingUtilities.isEventDispatchThread()
返回
false

只需要指出一点,SwingUtilities.isEventDispatchThread()在中返回false 这种情况

也许这就是问题所在,您是否尝试在EDT线程内调用L&F更改

    SwingUtilities.invokeLater(new Runnable() {
       public void run() {
         javax.swing.UIManager.setLookAndFeel("newlook&feel");
         SwingUtilities.updateComponentTreeUI(OuterClassName.this);
         pack();
        }
      });

你能给我们完整的异常跟踪和你的类定义吗?@shybovycha,它太长了,基本上我要做的是从另一个类调用这个GUI类的静态方法并更新一个静态变量。一旦它被更新,我在这个类中调用一个GUI外观更新方法,它基本上运行上述3行代码进行更新。它工作得很好,但我在控制台中看到许多来自java内部类的异常。这是错误日志:谢谢,但问题在于,我得到了编译时错误,说swingUtilities类型中的updateComponentTreeUI()方法不适用于参数(new Runnable(){})@Wojtek O。您处理问题的方法是正确的,但是当您在new Runnable()中引用它时它不会像您期望的那样通过外部对象。您需要在新的Runnable中手动传递外部对象,并将该对象作为参数调用该方法。@Johnydep:because
this
在这里解析为Runnable。您需要使用类似于
MyJFrame的内容。此
引用您的框架。否则,这个解决方案应该适用于您。当然,我编辑了我的答案,现在应该可以了。只需确保用外部类的正确名称更改
OuterClassName
。您好,谢谢,它成功了。其实问题不在于“这个”。我只是删除了pack();}后面的分号;而不是最后一个卷曲的布克加上});