小编Luk*_*Luk的帖子

分发使用自动模块的 JavaFX 应用程序

我创建了一个 JavaFX 应用程序。它在我的 Intellij IDE 中完美运行。现在我想分发应用程序 - 即我想获得一个用户可以下载的安装程序,然后它会为他们安装应用程序。

我在这里找到了一篇非常有趣的文章。这篇博客文章基本上描述了我想要实现的目标。但是有两个区别:

  1. 我正在使用 Maven 而不是 Gradle

  2. 我有使用自动模块的依赖项,例如 iText7 和 apache.commons.lang3

自动模块的使用使事情变得非常复杂。有一个名为 ModiTect(这里)的 GitHub 项目已经被编写来解决这些问题。我没有使用 ModiTect 的经验,甚至我的 Maven 知识也几乎不存在(意思是:我真的不知道我在 pom.xml 中做什么)。

我正在寻找的是关于如何将 ModiTect(以及如果需要的话 jpackage)集成到我的 pom.xml 以便为我的 JavaFX 应用程序获取安装程序的解释(逐步)数据库,虽然这应该不是问题)。

有人可以提供此解释或向我推荐教程吗?

我在这个问题的末尾提供了一个 MWE。MWE 是一个 TestApp。要说明问题,请运行应用程序并按“打印 PDF”按钮。在资源中创建 pdf --> pdf

执行 javafx:ru​​n 时 MWE 会编译运行 执行 javafx:jlink 时会出现与 automodules 使用相关的错误

我不知道如何解决这个问题。ModiTect 似乎是一个很有前途的插件。另一种可能的方法可以在GitHub 存储库中找到。但正如我之前所说:我的 Maven 知识不足以真正掌握这里发生的事情。任何帮助对我来说意义重大!

MWE:

项目结构

pom.xml:

<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.company</groupId>
    <artifactId>TestApp</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>15</maven.compiler.source>
        <maven.compiler.target>15</maven.compiler.target>
    </properties> …
Run Code Online (Sandbox Code Playgroud)

deployment javafx jlink moditect jpackage

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

Python:使用 SVD 实现 PCA

我试图找出使用奇异值分解的 PCA 与使用特征向量分解的 PCA 之间的差异。

想象一下下面的矩阵:

 B = np.array([          [1, 2],
                         [3, 4],
                         [5, 6] ])
Run Code Online (Sandbox Code Playgroud)

当使用特征向量分解计算该矩阵 B 的 PCA 时,我们遵循以下步骤:

  1. 通过从每列中减去列平均值将数据(B 的条目)居中
  2. 计算协方差矩阵C = Cov(B) = B^T * B / (m -1),其中 m = B 的 # 行
  3. 求 C 的特征向量
  4. PCs = X * eigen_vecs

当使用 SVD 计算矩阵 B 的 PCA 时,我们遵循以下步骤:

  1. 计算 B 的 SVD:B = U * Sigma * V.T
  2. PCs = U * Sigma

我已经为给定的矩阵完成了这两项工作。

通过特征向量分解,我得到这个结果:

[[-2.82842712  0.        ]
 [ 0.          0. …
Run Code Online (Sandbox Code Playgroud)

python svd pca data-science

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

计算包含 NaN 的数组之间的距离

考虑array1array2,其中:

array1 = [a1 a2 NaN ... an]
array2 = [[NaN b2 b3 ... bn],
          [b21 NaN b23 ... b2n],
          ...]
Run Code Online (Sandbox Code Playgroud)

两个数组都是 numpy 数组。有一种简单的方法可以计算array1和 的每一行之间的欧几里得距离array2

EuclideanDistance = np.sqrt(((array1 - array2)**2).sum(axis=1))
Run Code Online (Sandbox Code Playgroud)

搞乱这个计算的是 NaN 值。当然,我可以很容易地用一些数字替换 NaN。但相反,我想做以下事情:

当我array1row_xof进行比较时array2,我计算其中一个数组有 NaN 而另一个没有的列。让我们假设count是 3。然后我将从两个数组中删除这些列并计算两者之间的欧几里德距离。最后,我将 a 添加minus_value * count到计算的距离。

现在,我想不出一种快速有效的方法来做到这一点。有人可以帮助我吗?

以下是我的一些想法:

minus = 1000
dist = np.zeros(shape=(array1.shape[0])) # this array will store the distance of array1 to each row …
Run Code Online (Sandbox Code Playgroud)

python numpy

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

Spring Data JPA - 如何实现正确的异常处理?

我正在使用 Spring Data JPA 来处理数据库调用。为此,我创建了:

  1. EmployeeRepository 接口,它扩展了JpaRepository<Employee, Long>

  2. 一个 EmployeeService,它定义了三个方法:

     Employee saveEmployee(Employee employee);
     Optional<Employee> getEmployee(Long id);
     Long deleteEmployee(Long id);
    
    Run Code Online (Sandbox Code Playgroud)
  3. EmployeeService 的实现:

     @Override
     public Employee saveEmployee(Employee employee) {
         return employeeRepository.save(employee);
     }
    
     @Override
     public Optional<Employee> getEmployee(Long id) {
         return employeeRepository.findEmployeeById(id);
     }
    
     @Override
     public Long deleteEmployee(Long id) {
         employeeRepository.deleteById(id);
         return id;
     } 
    
    Run Code Online (Sandbox Code Playgroud)

问题如下:

get 方法工作正常并且可以返回一个可选值。另一方面,保存方法不能返回可选值。显然,JpaRepository 在调用 save() 时返回已保存对象的实例。我宁愿返回一个可选值,因为在保存员工时可能会出现问题,在这种情况下,我想抛出一个错误 - 即每当可选值不存在时,我就会抛出一个错误。

删除操作也是如此:例如,如果我要求删除一名员工并传入一个不存在的 id,该怎么办?我想捕获此错误,然后仅在删除操作成功时返回传入的 id。为此我必须捕获哪个错误?谁可以给我解释一下这个?

===================================================

更新:

  • 我通过在调用 `deleteById(id); 之前检查给定的员工 ID 是否存在,解决了删除调用的问题。如果不存在,服务返回 null,如果存在,则返回 id。控制器看起来像这样:

      @DeleteMapping("/{id}")
      public ResponseEntity<Long> deleteEmployee(@PathVariable Long id) {
          Long deletedEmployeeId = …
    Run Code Online (Sandbox Code Playgroud)

java hibernate spring-data-jpa spring-boot

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

JavaFX - 将一行从表格视图拖到文本区域中

考虑 JavaFX 应用程序内的表格视图。表视图包含有关人员的数据:

id    firstname    lastname

1     John         Doe
Run Code Online (Sandbox Code Playgroud)

表视图的每一行都可以用来实例化一个 Person 对象:

new Person(Integer id, String firstname, String lastname)

这是我想做的:

我想选择表格视图中的一个人,然后用鼠标将其拖动到文本区域中。在文本区域内我想打印字符串:

1 John Doe

我知道我必须实现三个函数才能实现此目的:onDragDetected(), onDragOver() and onDragDropped()

我想从以下开始:

public void onDragDetected(DragEvent dragevent) {
    Person person = tvPersonData.getSelectionModel().getSelectedItem();
}
Run Code Online (Sandbox Code Playgroud)

这有效。但我必须以某种方式让我的 Person 进入 DragBoard 对象 ( dragevent.getDragboard())。我想我是这样的。然后也许我的其他功能可以使用我的拖板内的任何内容。

有人可以帮我从这里出去吗?

drag-and-drop javafx tableview

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

为什么更改输入字段的值时不会触发“输入”事件?

考虑如下的最小形式:

let button = document.querySelector("button");
let firstNameInput = document.querySelector("#firstName");

firstNameInput.style.borderColor = "red";

button.addEventListener('click', () => {
  firstNameInput.value = "Goofy";
});

firstNameInput.addEventListener('input', () => {
  firstNameInput.style.borderColor = "black";
})
Run Code Online (Sandbox Code Playgroud)
.form__input {
  border: none;
  outline: none;
  border-bottom: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)
<form>
  <label for="firstName">Firstname:</label>
  <input type="text" class="form__input" id="firstName">

  <button type="button">Button</button>
</form>
Run Code Online (Sandbox Code Playgroud)

加载此页面时,您应该看到一个带有红色底边框的输入字段,旁边有一个按钮。如果单击该按钮,名称“Goofy”就会写入输入字段内。但是,下边框保持红色。我希望它在输入字段内写入内容时改变其颜色。现在,当我继续手动更改名称时,边框颜色将其颜色更改为黑色,正如我想要的那样。但是谁能向我解释为什么单击按钮时边框颜色没有改变?

html javascript css event-listener

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

Perl in command line: perl -p -i -e "some text" /path

I am not familiar with perl. I am reading an installation guide atm and the following Linux command has come up:

perl -p -i -e "s/enforcing/disabled/" /etc/selinux/config
Run Code Online (Sandbox Code Playgroud)

Now, I am trying to understand this. Here is my understanding so far:

-e 只允许执行以下内容

-p 将我跟在 -e 之后的命令放入一个循环中。现在这对我来说很奇怪,对我来说这个命令似乎是想说:将“s/enforcing/disabled/”写入/etc/selinux/config。再说一次,“写入”命令在哪里?这个 -i(内联)有什么用?

perl command-line

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