小编Wol*_*ahl的帖子

如何创建灵活的插件架构?

我的开发工作中的一个重复主题是使用或创建内部插件架构.我已经看到它涉及多种方式 - 配置文件(XML,.conf等),继承框架,数据库信息,库等.在我的经验中:

  • 数据库不是存储配置信息的好地方,尤其是与数据混合在一起
  • 尝试使用继承层次结构需要了解要编码的插件,这意味着插件架构不是那么动态
  • 配置文件适用于提供简单信息,但无法处理更复杂的行为
  • 库似乎运行良好,但必须仔细创建单向依赖.

当我试图从我曾经使用过的各种架构中学习时,我也在寻求社区的建议.您是如何实现SOLID插件架构的?你最糟糕的失败是什么(或者你看到的最严重的失败)?如果要实现新的插件架构,您会怎么做?您使用过的SDK或开源项目是否具有良好架构的最佳示例?

我自己找到的几个例子:

这些例子似乎发挥了各种语言优势.一个好的插件架构是否必然与语言相关?最好使用工具来创建插件架构,还是在自己的以下模型上进行?

language-agnostic architecture plugins plugin-architecture

149
推荐指数
7
解决办法
6万
查看次数

如何将Java8流的元素添加到现有List中

收集器的Javadoc显示如何将流的元素收集到新的List中.是否有一个单行程序将结果添加到现有的ArrayList中?

java java-8 java-stream collectors

139
推荐指数
4
解决办法
16万
查看次数

79
推荐指数
3
解决办法
7万
查看次数

Java事件派遣线程说明

我最近开始学习和探索Java中GUI编程的基础知识.

经过一段时间的编程后,我只完成了后端工作或工作,因此最接近用户界面的是命令控制台(我知道这令人尴尬).

我正在使用Swing,据我所知,这意味着我也使用AWT.

我的问题是基于这段代码:

java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
        new frame.setVisible(true);
    }
} );
Run Code Online (Sandbox Code Playgroud)

我一直在研究这一段时间,因为我想完全理解这种奇怪的代码和所遇到的术语"事件派发线程"多次.如果我错了,但正如我所理解的那样纠正我; 它与使用多个线程以及Java Swing如何解释这些线程有关.我也收集到上面的代码用于确保所有线程在创建窗口之前是"安全的",因此invokeLater?

我读过:

"你只能从Event-Dispatching Thread中调用对框架进行操作的方法"

并且只有在某些情况下才能调用main方法对框架进行操作的方法.

有人可以向我澄清一下Event-Dispatching Thread到底是什么吗?

它如何与多个执行线程相关,以及如何从main方法调用这些线程是不安全的?为什么我们需要这个invokeLater?

我们不能像其他任何对象一样创建窗口吗?

我在研究中遇到了一些障碍,因为我没有抓住这些关系和想法.

一个侧面说明,我喜欢将我的知识建立在深入理解的基础上,因为我相信这会带来最好的整体结果,并因此成为最好的计划.如果我深入了解某些东西是如何工作的,那么你可以有效地使用提示和调整,而不仅仅是将它们重新编入代码中,所以请不要害怕给我一些额外的深入解释并扩展我的知识.

谢谢.

java swing awt event-dispatch-thread

54
推荐指数
2
解决办法
3万
查看次数

寻找Java拼写检查库

我正在寻找一个开源Java拼写检查库,它至少包含以下语言的字典:法语,德语,西班牙语和捷克语.有什么建议吗?

java nlp spell-checking languagetool

53
推荐指数
2
解决办法
5万
查看次数

AttributeError:模块“sqlalchemy”没有属性“__all__”

从今天起,我在 GitHub CI 中收到如下错误:

File "/home/runner/.local/lib/python3.8/site-packages/fb4/login_bp.py", line 12, in <module>
    from fb4.sqldb import db
  File "/home/runner/.local/lib/python3.8/site-packages/fb4/sqldb.py", line 8, in <module>
    db = SQLAlchemy()
  File "/home/runner/.local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 758, in __init__
    _include_sqlalchemy(self, query_class)
  File "/home/runner/.local/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", line 112, in _include_sqlalchemy
    for key in module.__all__:
AttributeError: module 'sqlalchemy' has no attribute '__all__'

CRITICAL: Exiting due to uncaught exception <class 'ImportError'>
Run Code Online (Sandbox Code Playgroud)

不知道任何可能导致这种情况的重大提交。我的本地测试和 Jenkins CI 仍然有效。

我更改了矩阵以坚持使用 python 3.8,而不是尝试 3.9、3.10 和 3.11,还考虑到python 3.9 AttributeError: module 'posix' has no attribute '__all__'中的类似问题是由于缺少 3.9 支持。

如何调试和缓解上述错误?

我的假设是问题出在设置/环境中,或者 …

python sqlalchemy

24
推荐指数
2
解决办法
3万
查看次数

如何添加两个单词模式以供LanguageTool忽略?

情况:

作为尚未实现的功能的解决方法,将单词的用户词典添加到Languagetool,我想出了这段代码:

JLanguageTool langTool = new JLanguageTool(lang);
langTool.activateDefaultPatternRules();
List<Rule> rules = langTool.getAllActiveRules();
for (Rule rule:rules) {
    // System.out.println(rule.getId());
    if (rule.getId().equals("GERMAN_SPELLER_RULE")) {
        if (rule instanceof SpellingCheckRule) {
            SpellingCheckRule srule=(SpellingCheckRule) rule;
            String [] words={"word1", "word2"};
            List<String> tokens=new ArrayList<String>();
            for (String word:words) {
                tokens.add(word);
            }
            srule.addIgnoreTokens(tokens);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将很好地添加由指定的单词列表

String [] words={"word1", "word2"};
Run Code Online (Sandbox Code Playgroud)

到被忽略的单词列表.但是如何组合单词/两个单词模式如"访客浴室","法语单词""测试应用程序" - 如何在不修改原始语法文件的情况下忽略这些?我假设创建一些用户定义的规则可以做到这一点,也可能是上面代码片段更优雅的解决方案.

题:

获取用户词典的工作方法是什么,忽略单词和双词短语?

java spell-checking languagetool

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

Proguard混淆打破simplexml

我在我的android项目中使用simplexml,一切正常,直到我混淆代码.然后,错误开始涌入.

部分XML如下:

<categories success="true">
  <category id="102" caption="Magazin" parent="0" num_mags="114" >
    <category id="15" caption="Kunst" parent="102" num_mags="13" >
      <category id="17" caption="Design" parent="15" num_mags="10" ></category>
      <category id="18" caption="Haute+Couture" parent="15" num_mags="2" >
...
Run Code Online (Sandbox Code Playgroud)

我有两个类:CategoryItemList:

@Root(name = "categories")
public class CategoryItemList {

    private final List<CategoryItem> mCategoryItems;
    /**
     * Create a new category items list.
     * 
     * @param categoryItems the list of category items
     */
    public CategoryItemList(@ElementList(name = "category", inline = true) final List<CategoryItem> categoryItems) {
        mCategoryItems = categoryItems;
    }
    @ElementList(name = "category", inline = true) …
Run Code Online (Sandbox Code Playgroud)

android proguard simple-framework

20
推荐指数
2
解决办法
6866
查看次数

com.jayway.maven.plugins.android.generation2:生命周期配置未涵盖插件执行?

我很难过.我们最近将我们的Android项目转换为Maven项目.我的合作伙伴正在使用IntelliJ而我正在使用Eclipse.他说这可以通过他的设置很好地构建.

我是Maven的新手并且已经按照教程阅读了我能找到的所有内容来尝试解决这个问题.

我的pom.xml文件中有以下错误:

Multiple annotations found at this line:
- Plugin execution not covered by lifecycle configuration: com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.3.2:proguard (execution: default-proguard, 
 phase: process-classes)
- Plugin execution not covered by lifecycle configuration: com.jayway.maven.plugins.android.generation2:android-maven-plugin:3.3.2:generate-sources (execution: default-
 generate-sources, phase: generate-sources)
Run Code Online (Sandbox Code Playgroud)

这是我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.groupmd.clientandroid</groupId>
<artifactId>clientandroid</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>apk</packaging>
<name>GroupMD</name>

<dependencies>
    <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>support-v4</artifactId>
        <version>r7</version>
    </dependency>
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.2.2</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.actionbarsherlock</groupId>
        <artifactId>actionbarsherlock</artifactId>
        <version>4.2.0</version>
        <type>apklib</type>
    </dependency>
</dependencies>
<build>
    <finalName>${project.artifactId}</finalName>
    <sourceDirectory>src</sourceDirectory>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>com.jayway.maven.plugins.android.generation2</groupId>
                <artifactId>android-maven-plugin</artifactId>
                <version>3.3.2</version>
                <extensions>true</extensions> …
Run Code Online (Sandbox Code Playgroud)

eclipse android maven android-maven-plugin

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

寻找一个dropwizard的例子

寻找一个dropwizard示例,我发现:

https://github.com/codahale/dropwizard/tree/master/dropwizard-example

但我对一个更完整的例子感兴趣,至少:

  1. 像客户 - 账户这样的1:n关系
  2. 一个html gui代表至少与表格
  3. 对xml的完整crud支持

三分之二将是一个开始,我将获得"接受".

dropwizard

15
推荐指数
2
解决办法
2万
查看次数