在 JDK21 和 JDK8、Windows11 中向 JavaFX TextField 中输入任何内容时,会发生 StringIndexOutOfBoundException

问题描述 投票:0回答:1

当我运行 JavaFX TextField 元素的这个简单代码片段时,我在文本字段中输入一些内容,然后定期抛出 StringIndexOutOfBoundsException。

版本

JDK: 21.0.0, 21.0.2, 1.8
JavaFX: 
`javafx.runtime.version=8.0.65 javafx.runtime.build=b17`
`javafx.version=21 javafx.runtime.version=21+31 javafx.runtime.build=31`
Windows:
`Edition=Windows 11 Pro, Version=23H2`

error image 1

错误信息

Exception in thread "JavaFX Application Thread" java.lang.StringIndexOutOfBoundsException: Range [1, -2147483648) out of bounds for length 1
    at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
    at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
    at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
    at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
    at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
    at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
    at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
    at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4861)
    at java.base/java.lang.String.substring(String.java:2830)
    at javafx.graphics@21/com.sun.glass.ui.win.WinTextRangeProvider.GetText(WinTextRangeProvider.java:367)
    at javafx.graphics@21/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics@21/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185)
    at java.base/java.lang.Thread.run(Thread.java:1583)

源代码

package comp3111.qsproject;

// Java program to create a textfield and add it to stage
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TextFieldTest extends Application {

    // launch the application
    public void start(Stage s)
    {
        // set title for the stage
        s.setTitle("creating TextField");

        // create a textfield
        TextField b = new TextField();

        // create a stack pane
        StackPane r = new StackPane();

        // add textfield
        r.getChildren().add(b);

        // create a scene
        Scene sc = new Scene(r, 200, 200);

        // set the scene
        s.setScene(sc);

        s.show();
    }

    public static void main(String args[])
    {
        // launch the application
        launch(args);
    }
}

我重新安装JDK后这个问题还没有解决。

任何建议都很有价值。谢谢你

java javafx indexoutofboundsexception gluon
1个回答
0
投票

解决方法:关闭其他正在运行的应用程序。据 JabRef#11151 报道,该问题是由 DeepL Windows 应用程序 引起的。我在我的 Windows 10 机器上尝试过。运行 DeepL:出现错误。 DeepL 关闭:错误消失了。


供其他人复制:

  1. 前往https://www.deepl.com/en/app/
  2. 下载应用程序
  3. 启动应用程序
  4. 标记一些文字
  5. Ctrl+C+C 检查 DeepL 是否真正运行
  6. 切换到 JavaFX 应用程序
  7. 在文本字段中输入内容
  8. 您应该看到异常
© www.soinside.com 2019 - 2024. All rights reserved.