Swing “如何修复”;(java:22494):Gdk警告…“;

Swing “如何修复”;(java:22494):Gdk警告…“;,swing,javafx,swingutilities,Swing,Javafx,Swingutilities,我正在写一个javafx程序,我需要面板以恒定速率更新。现在它设置为每秒更新一次。但我得到了这个错误,通常(但不总是)当整个场景扭曲时,面板上会出现小故障(就像镜子以一种奇怪的起伏的x模式出现在自己身上,很难解释) 完全错误:(java:22494):Gdk警告**:18:38:59.118:XSetErrorHandler()调用时推送了Gdk错误陷阱。不要那样做 这是我的计时器代码: Timer timer = new Timer(); timer.scheduleAtFix

我正在写一个javafx程序,我需要面板以恒定速率更新。现在它设置为每秒更新一次。但我得到了这个错误,通常(但不总是)当整个场景扭曲时,面板上会出现小故障(就像镜子以一种奇怪的起伏的x模式出现在自己身上,很难解释)

完全错误:(java:22494):Gdk警告**:18:38:59.118:XSetErrorHandler()调用时推送了Gdk错误陷阱。不要那样做

这是我的计时器代码:

Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run()  {
                SwingUtilities.invokeLater(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            String x = txtDisplay.getText();
                            txtDisplay.setText(x.substring(1, x.length()) + x.substring(0, 1));
                        } catch (NullPointerException e) {
                            System.out.println("Error.");
                        }
                    }
                });
            }
        }, 0, 500);
我认为问题在于上面的模块,比如我可能打破了一些基本的摆动规则。我的另一个想法是,它有两种方法可以同时编辑相同的文本区域,因为我有其他方法可以设置文本区域的文本

我很乐意找到一个解决错误的方法,或者找到一个更好的执行上述方法的方法。只需要每秒钟跑一次,而不会撞车

谢谢


编辑:一个新的开发,我现在一直得到一个“线程中的异常”AWT-EventQueue-0“java.lang.NullPointerException”,但是stacktrace没有引用代码中的任何位置

这似乎与有关(另请参见)。即JDK 8、9和11以及GTK 3存在一些问题

对我来说(在LinuxMint20.1和OpenJDK11上,Bellsoft 11.0.10.fx librca),解决方案是使用
-Djdk.GTK.version=2


其他人通过升级到JDK 12或更高版本解决了这个问题。

这看起来与相关(另请参阅)。即JDK 8、9和11以及GTK 3存在一些问题

对我来说(在LinuxMint20.1和OpenJDK11上,Bellsoft 11.0.10.fx librca),解决方案是使用
-Djdk.GTK.version=2


其他人通过升级到JDK 12或更高版本解决了这个问题。

您正在编写JavaFX或Swing应用程序吗?或者你是在另一个中嵌入一个呢?我正在编写一个javafx应用程序,但是为了实现计时器,我查找了它,他们使用了一个swing嵌入,从我所知,因此计时器是一个swing嵌入(虽然我可能错了,我是一个初学者)。对于swing,我相信你会使用一个用于UI相关任务,一个用于后台任务。对于JavaFX,您将使用用于UI相关任务,使用用于后台任务。相关:。您正在编写JavaFX或Swing应用程序吗?或者你是在另一个中嵌入一个呢?我正在编写一个javafx应用程序,但是为了实现计时器,我查找了它,他们使用了一个swing嵌入,从我所知,因此计时器是一个swing嵌入(虽然我可能错了,我是一个初学者)。对于swing,我相信你会使用一个用于UI相关任务,一个用于后台任务。对于JavaFX,您将使用用于UI相关任务,使用用于后台任务。相关:。