小编Tre*_*kaz的帖子

我们如何使用XMLEventReader解析DOCTYPE信息?

我有一些现有的代码可以解析顶级元素名称空间以确定我们正在查看哪种 XML 文件。

XMLEventReader reader = createXMLEventReader(...);
try {
    while (reader.hasNext()) {
        XMLEvent event = reader.nextEvent();
        switch (event.getEventType()) {
            case XMLStreamConstants.DTD:
                // No particularly useful information here?
                //((DTD) event).getDocumentTypeDeclaraion();
                break;

            case XMLStreamConstants.START_ELEMENT:
                formatInfo.qName = ((StartElement) event).getName();
                return formatInfo;

            default:
                break;
        }
    }
} finally {
    reader.close();
}
Run Code Online (Sandbox Code Playgroud)

如果我允许解析器从 Web 加载 DTD,getDocumentTypeDeclaraion()则包含一个巨大的字符串,其中包含的信息比我知道如何处理的信息多,因为它在移交字符串之前将所有相关的 DTD 插入到该字符串中。另一方面,如果我阻止解析器从 Web 加载 DTD(出于显而易见的原因,无论如何这是更好的选择),它只会给我字符串"<!DOCTYPE".

有没有办法取回 DOCTYPE 内的值?

我正在使用 JRE 附带的默认解析器,以防万一。

java xml dtd xmlstreamreader

4
推荐指数
1
解决办法
965
查看次数

我的Wicket验证规则能否以干燥的方式记录给用户?

我有一堆使用Wicket内置验证进行验证的表单.

测试人员刚刚注意到,如果他们在键入值并获得错误之前可以看到验证规则,那就太好了.

我想这样做,但是如果我只是将验证规则放在HTML中,那么相同的验证规则现在记录在两个地方(一次在Java中,一次在英语中),因此如果有任何变化,它们将保证不同步.

是否有一些正确的方法来做到这一点,同时仍然保持代码干?

java validation wicket dry

3
推荐指数
1
解决办法
92
查看次数

当文本从右到左时,确定JTextArea区域中存在的文本

我有一些代码试图确定文本区域的给定垂直切片中的文本是什么,其中垂直切片被指定为Y坐标而不是线.

顺便说一下,转换为使用线数学是这个问题的一个很好的解决方法,所以这就是我将要使用的,但是我可以设想你可能只有Y坐标的情况,它看起来像这样的东西会出现,所以无论如何我都会问它.

我把我的问题简化为一个相当简约(lol Java)的例子.我们显示带有一些文本的框架,然后尝试确定最接近文本区域开头的文本的字符偏移量.我们从常识中知道它将为0,但是以编程方式解决问题就是问题.

public static void main(String[] args) throws Exception {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            new RtlTest().run();
        }
    });
}

JFrame frame;
JTextArea textArea;

public void run() {
    textArea = new JTextArea(
        "\u05D4\u05D5\u05D3\u05E2\u05EA \u05D8\u05D9\u05D9\u05D2\u05E8 " +
        "\u05D8\u05E7\u05E1\u05D8 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA");

    frame = new JFrame();
    frame.setLayout(new BorderLayout());
    frame.add(new JScrollPane(textArea), BorderLayout.CENTER);
    frame.setSize(400, 300);
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.setVisible(true);
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            measure();
        }
    });
}

public void measure() {
    try {
        System.out.println("Either the line is left to …
Run Code Online (Sandbox Code Playgroud)

java swing jtextarea right-to-left

3
推荐指数
1
解决办法
244
查看次数

如何将类传递给Nashorn中的方法?

我们的一个脚本有以下行,在Ant中调用一个方法来获取提供者:

var provider = resource.as(org.apache.tools.ant.types.resources.FileProvider);
Run Code Online (Sandbox Code Playgroud)

自从更新到Java 8以来,现在失败并出现错误:

java.lang.ClassCastException: Cannot cast jdk.internal.dynalink.beans.StaticClass to java.lang.Class
        at sun.invoke.util.ValueConversions.newClassCastException(ValueConversions.java:461)
        at sun.invoke.util.ValueConversions.castReference(ValueConversions.java:456)
        at jdk.nashorn.internal.scripts.Script$\^eval\_.getFileHack(<eval>:131)
        at jdk.nashorn.internal.scripts.Script$\^eval\_.runScript(<eval>:207)
Run Code Online (Sandbox Code Playgroud)

我试图找出Nashorn文档中的变化,但不是特别清楚.使用我在记录的示例中看到的以下更改会产生相同的错误:

var provider = resource.as(Java.type("org.apache.tools.ant.types.resources.FileProvider"));
Run Code Online (Sandbox Code Playgroud)

如何将StaticClass转换为Java类以在此处传递它?

java-8 nashorn

3
推荐指数
1
解决办法
1413
查看次数

Compose Desktop 测试 - 如何检查某些内容是否可见?

给出一些简单的内容:

@Composable
fun MyContent() {
    var showThing by remember { mutableStateOf(false) }
    if (showThing) {
        Box(Modifier.testTag("thing")) {
            Text("The Thing")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试测试该内容是否已显示:

@OptIn(ExperimentalTestApi::class)
class Scratch {
    @get:Rule
    val compose = createComposeRule()

    @Test
    fun test() {
        runBlocking(Dispatchers.Main) {
            compose.setContent {
                MyContent()
            }
            compose.awaitIdle()

            compose.onNodeWithTag("thing").assertIsNotDisplayed()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

An operation is not implemented.
kotlin.NotImplementedError: An operation is not implemented.
    at androidx.compose.ui.test.DesktopAssertions_desktopKt.checkIsDisplayed(DesktopAssertions.desktop.kt:23)
    at androidx.compose.ui.test.AssertionsKt.assertIsNotDisplayed(Assertions.kt:49)
    at Scratch$test$1.invokeSuspend(Scratch.kt:44)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    ...
Run Code Online (Sandbox Code Playgroud)

我认为测试某些内容是否显示是最基本的测试内容,但框架尚不支持它。测试框架是实验性的,所以我期望找到一些缺失的东西,但不是这样的。

还有另一种方法可以做到我所缺少的吗?所有的教程都谈到了assertIsDisplayed()这种方式,但也许还有其他选择?

testing kotlin compose-desktop

3
推荐指数
1
解决办法
2903
查看次数

如何在Android Wear上调整下巴布局?

在具有"下巴"的Android Wear设备上,屏幕大小仍然报告为方形,但是您将获得此WindowInsets对象,其中包含有关从屏幕裁剪的内容的信息.

我有一个配置屏幕已经正确获取此值,很容易确认,因为我的视图呈现屏幕形状的轮廓.

public class ConfigView extends FrameLayout {
    private Rect lastBounds = new Rect();
    private WindowInsets lastWindowInsets;

    //... omitting initialisation

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        requestApplyInsets();

        // omitting other stuff not relevant to this

        GridViewPager pager =
            (GridViewPager) findViewById(R.id.pager);
        DotsPageIndicator dotsPageIndicator =
            (DotsPageIndicator) findViewById(R.id.page_indicator);
        dotsPageIndicator.setPager(pager);
    }

    @Override
    public WindowInsets onApplyWindowInsets(WindowInsets insets) {
        WindowInsets result = super.onApplyWindowInsets(insets);

        lastWindowInsets = insets;
        maybeInitialiseViews();

        return result;
    }

    @Override
    protected void onLayout(boolean changed, int left, int top,
                            int right, int bottom) …
Run Code Online (Sandbox Code Playgroud)

java android android-layout

2
推荐指数
1
解决办法
609
查看次数

如果Wicket链接到CSS样式表,为什么页面会有状态?

我有一些Wicket页面,如下所示:

(HomePage.html)

<html>
  <head>
    <title>Front</title>
    <link wicket:id="applicationCss" rel="stylesheet" type="text/css"
          href="stylesheets/application.css"/>
  </head>
  <body>
    <!-- Content unnecessary -->
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

(HomePage.java)

public class HomePage extends AbstractWebPage {
    public HomePage() {
        // Nothing necessary (real application initialises some other links here.)
    }
}
Run Code Online (Sandbox Code Playgroud)

(AbstractWebPage.java)

public abstract class AbstractWebPage extends WebPage {
    protected AbstractWebPage() {
        setStatelessHint(true);

        // *** the trouble-maker:
        add(new ResourceLink<>(
            "applicationCss",
            new CssResourceReference(AbstractWebPage.class,
                                     "stylesheets/application.css")));
    }
}
Run Code Online (Sandbox Code Playgroud)

当我访问我的主页时/admin,浏览器会立即重定向到/admin?0,表明该页面不是无状态的.但是,我唯一添加的是一个链接,据我所知,通过阅读代码,它不是有状态的.

当然,如果我删除<link>HTML 中的标记和AbstractWebPage中的add()语句,页面将返回无状态.

我究竟做错了什么?理想情况下,我希望用户看到的任何URL都是无状态的,但只要在所有页面上都包含样式表,突然之间所有无状态页面都是有状态的,没有明显的原因.

java wicket stateless

1
推荐指数
1
解决办法
752
查看次数

JSplitPane 的 Jetpack Compose 替代品是什么?

在 Swing 中,我用来JSplitPane创建一个左侧(前导)具有树视图的区域和一个右侧(尾随)具有十六进制查看器的区域,用户可以在其中移动分隔线来调整每个获得的空间。

由于 Jetpack Compose 仍然相对较新,因此诸如SplitView(此类组件的假设名称遵循其命名方案)之类的基本组件尚不存在。我能看到的最接近的概念是RowandColumn但这些用户不能调整大小(据我所知。)

如果不嵌入 Swing JSplitPane,然后在分割窗格的每一侧嵌入 Compose 组件,是否有一个好的方法可以做到这一点?

我找到了一个例子,成功了 90%,但是有一些被删除的 API 很难找到替代品,因为发行说明似乎没有提及它。(!!)

draggable splitpane compose-desktop

1
推荐指数
1
解决办法
729
查看次数

如何获得可能仅给出叶证书的证书链?

我正在尝试实现一个自定义X509TrustManager,该自定义告诉用户有关证书的信息,并使他们能够在出现问题的情况下继续使用服务器。

我已将几乎所有内容连接在一起,并开始针对badssl.com上的各种证书进行测试

当我在 Safari 中访问expired.badssl.com时,我看到三个证书:

* COMODO RSA Certification Authority
    * COMODO RSA Domain Validation Secure Server CA
        * *.badssl.com 
Run Code Online (Sandbox Code Playgroud)

我的应用程序获得了完整的链。

但是,当我访问wrong.host.badssl.com时,Safari 仍然显示三个证书,但我的应用程序只看到两个:

* DigiCert Global Root CA (Not in the array passed to the method!)
    * DigiCert SHA2 Secure Server CA
        * *.badssl.com
Run Code Online (Sandbox Code Playgroud)

我假设我可以使用“DigiCert SHA2 Secure Server CA”证书中的“Issuer”名称以某种方式找到根证书,但我在哪里找到它?

java ssl certificate ssl-certificate x509certificate

0
推荐指数
1
解决办法
828
查看次数