我在使用 Java 的 linux 系统上读取(和写入)文件时遇到问题。我的应用程序抱怨它无法读取某些音频文件,当我查看系统时,我注意到ls -l这些文件也失败了,并且所有问题文件都是包含带引号等字符的文件,例如é,没有这些字符的文件是可以的。
[root@N1-0247 Georges Bizet- Suites from Carmen & L'arlésienne]# pwd
/mnt/disk1/share/import/all/MusicUnmatched/WAV/Yan Pascal Tortelier/Georges Bizet- Suites from Carmen & L'arlésienne
[root@N1-0247 Georges Bizet- Suites from Carmen & L'arlésienne]# ls -l
ls: cannot access 20 - L' Arlésienne, suite for orchestra No. 1, from the incidental music- Farandole.WAV: No such file or directory
ls: cannot access 19 - L' Arlésienne, suite for orchestra No. 1, from the incidental music- Minuetto.WAV: No such file …Run Code Online (Sandbox Code Playgroud) 如果已安装,则无法重新运行JPackage安装程序,第二次似乎只是在没有警告的情况下退出,这在 Windows 上是正确的行为吗?
你可能会问我为什么要这样做?
就我而言,我正在尝试为我的 Java 应用程序构建 JPackage 安装程序,因此我正在构建它并安装它,然后调整设置,重建它并尝试重新安装。我花了一些时间才发现除非我卸载第一个安装(使用控制面板,程序和功能),否则我无法重新安装它
我的案例可能不是通常的用例,但它在没有给出任何原因的情况下退出,感觉不正确。
这也意味着,如果我向客户部署新版本,并且稍后需要修改安装程序,则必须修改版本号才能让用户重新安装,这通常可能是最佳实践,但我并不是特别想要如果应用程序本身没有更改,则执行此操作。
更新:自从通过查看 TaskManager 发现它仍在运行,但似乎没有做任何事情并且没有向用户提供任何指示!
我正在使用JPackage在 Windows 上安装我的 Java 应用程序,我有自己的应用程序图标,我也希望在运行安装程序时也使用它。
我按照此处描述的一般方法运行 jpackage 两次,一次创建资源目录,一次使用资源目录。
例如
jpackage @jpackage.txt --temp target/jpackage
jpackage @jpackage.txt --resource-dir target/jpackage
Run Code Online (Sandbox Code Playgroud)
但是,在两次调用之间,我在创建的目标/jpackage 资源目录中看不到任何要修改的安装程序图标。实际上,我看不到任何可以明显改变的东西,我很想知道人们为 Windows 安装做了什么改变。
在 Linux 上创建 JPackage 安装程序 Java 应用程序的规范是什么?
我已经为 Windows 创建了一个安装程序,现在正在 Linux 上创建一个(使用 Ubuntu)
到目前为止,我有:
-i target/Jaikoz/buildLinux
--main-class com.jthink.jaikoz.Jaikoz
--name Jaikoz
--main-jar lib/jaikoz.jar
--app-version 10.1.0
--copyright "Copyright 2020 JThink Ltd, United Kingdom"
--arguments "-l2 -m2 -f" --java-options "-Dhttps.protocols=TLSv1.1,TLSv1.2"
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED"
--vendor JThink
--icon "Jaikoz64.png"
--install-dir /opt
--linux-menu-group Jaikoz
--linux-shortcut
Run Code Online (Sandbox Code Playgroud)
对于创建 debian 安装程序,它可以工作(安装尚未正常运行)但我对很多事情感到困惑,我对 linux 环境不太熟悉。
由于MacOS Big Sur 中的错误,我需要运行以下命令
defaults write com.jthink.songkong "AppleWindowTabbingMode" manual
Run Code Online (Sandbox Code Playgroud)
用于我的 Java 应用程序与 Java 的捆绑版本
有没有一种方法可以将它添加到我的Info.plist文件中,以便它已经在新安装中自动设置,我也可以使用Runtime类从 Java 中运行命令,但如果我可以将它配置为Info.plist 文件的一部分,但我不太了解 macOS,无法知道这是否有意义。我设法在构建期间添加了它,因此我的 Info.plist 文件包含
<key>AppleWindowTabbingMode</key>
<string>manual</string>
Run Code Online (Sandbox Code Playgroud)
但是,它没有任何效果。
我不清楚是我做错了什么还是根本不可能。
对不起,我不知道使用的正确术语,但我有一个像这样的3x3矩阵
1 3 4
5 4 5
2 2 5
Run Code Online (Sandbox Code Playgroud)
我希望通过从每一行/列中选择一个值来获得最高分,但我不能多次选择相同的行或列,所以这种情况下的答案是
3 + 5 + 5 = 13(row0,col1 + row1,col0 + row2,col2)
不允许4 + 5 + 5 = 14,因为它会从col2中选择两个值
我正在使用Java,通常矩阵的大小为15 x 15.
是否有我试图做的名称,以及算法是什么
谢谢保罗
编辑:注意:匈牙利算法只有在没有行等于没有cols的情况下才有效,而在我的情况下,情况并非总是如此,我经常会遇到10x12或11x13的情况.但是看起来你可以通过添加额外的虚拟行来绕过它.
编辑嗯,尝试其中一个implmentations并没有alwasy似乎工作,除非我误读它
100.0,100.0,100.0,100.0,30.0,80.0,80.0,100.0,100.0,80.0, 80.0,100.0,100.0,100.0,80.0,80.0,25.0,100.0,100.0,80.0, 80.0,100.0,100.0,100.0,80.0,25.0,80.0,100.0,100.0,80.0, 100.0,25.0,80.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0, 0.0,100.0,100.0,100.0,100.0,80.0,80.0,100.0,100.0,100.0, 100.0,100.0,100.0,100.0,100.0,100.0,100.0,100.0,25.0,100.0, 100.0,100.0,100.0,25.0,100.0,100.0,100.0,75.0,100.0,100.0, 100.0,80.0,30.0,100.0,75.0,100.0,100.0,100.0,100.0,100.0, 100.0,100.0,100.0,100.0,80.0,80.0,80.0,100.0,100.0,25.0, 100.0,100.0,100.0,75.0,100.0,100.0,100.0,25.0,100.0,100.0, Results calculated 0:4,0, 1:3,1, 2:7,2, 3:6,3, 4:0,4, 5:2,5, 6:1,6, 7:9,7, 8:5,8, 9:8,9,
好的,所以我知道如何通过代码向网站发送HTTP POST请求,并且知道如何在浏览器(HTTP GET)中打开网址。但是如何在浏览器中打开HTTP POST。
编辑:更多详细信息:该网站允许您打开一个页面以添加新条目,您可以通过发布该信息来为该页面添加信息。我的Java桌面应用程序中包含该信息,因此我想从Java应用程序中使用已知信息作为种子,在用户首选的浏览器中打开添加新条目页面。
编辑:因此,我尝试了Lees的答案,并设法用提交按钮构建了一个网页,当您单击它时,它进入了最后一个页面,其中填写了字段,但是我无法使javascript工作,因此它可以自动地到达那里而无需按提交按钮。这是我生成的网页
<html><head>
<script type = "text/javascript">
function onLoad()
{
document.getElementById('form').submit();
}
</script>
</head>
<body>
<form name="form" action="http://test.musicbrainz.org/release/add" method="post">
<input name="name" type="hidden" value="Porcupine"/>
<input type="submit" value="send">
</form>
</body>
Run Code Online (Sandbox Code Playgroud) 我提出一些使用裹着一个2线FixedThreadPool的ExecutorService一个CompletionService未来的某个任务,我设置,则设置等于提交的任务数的循环和使用completionservice.take()等待他们全部完成或失败.麻烦很偶然,它永远不会完成(但我不知道为什么)所以我将take()方法更改为轮询(300,Timeout.SECONDS),这个想法是,如果一个任务需要超过5分钟才能完成轮询将失败,然后最终将退出循环,我可以通过所有的期货并调用future.cancel(true)强制取消违规任务.
但是当我运行代码并且它挂起时,我看到轮询每5分钟就会连续失败并且没有更多任务运行所以我认为这两个工作人员在某种程度上陷入僵局并且从未完成,并且从不允许其他任务启动.因为超时是5分钟并且仍然有1000个任务要运行所以打破循环所花费的时间太长所以取消了这个工作.
所以我想做的是中断/强制取消当前任务,如果还没有在5分钟内完成,但我无法看到任何方法.
此代码示例显示了我正在谈论的内容的简化版本
import com.jthink.jaikoz.exception.JaikozException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.*;
public class CompletionServiceTest
{
public static void main(final String[] args)
{
CompletionService<Boolean> cs = new ExecutorCompletionService<Boolean>(Executors.newFixedThreadPool(2));
Collection<Worker> tasks = new ArrayList<Worker>(10);
tasks.add(new Worker(1));
tasks.add(new Worker(2));
tasks.add(new Worker(3));
tasks.add(new Worker(4));
tasks.add(new Worker(5));
tasks.add(new Worker(6));
List<Future<Boolean>> futures = new ArrayList<Future<Boolean>>(tasks.size());
try
{
for (Callable task : tasks)
{
futures.add(cs.submit(task));
}
for (int t = 0; t < futures.size(); t++)
{
Future<Boolean> result = cs.poll(10, TimeUnit.SECONDS);
if(result==null)
{
System.out.println("Worker …Run Code Online (Sandbox Code Playgroud) 在我的Java应用程序中,用户可以指定如何从一系列元数据字段中命名文件.即
%artist% - %album% - %disctotal%
Run Code Online (Sandbox Code Playgroud)
然后我的代码解析这些字段并重新编译文件.但我希望用户能够使用'表达语言',这样他们可以说:
$if(%disctotal% >= 01,%discno%)
Run Code Online (Sandbox Code Playgroud)
使用ifelse,比较长度和案例等.
我不想从头开始写这个,有什么东西可以提供给我,我可以插入到我的代码中吗?
编辑:我想我有一些很好的回复,但我的知识让我失望.让我们简化我希望用户能够编写的问题
$ if(%disctotal%> = 01,%discno%)
进入gui的一个领域.
然后在我的Java代码中,我希望能够将此表达式应用于一组文件,因此对于每个文件,我都有disctotal的值,而discno但是我希望能够将表达式转换为类似的
if(discTotal> = 1){return discNo} else {return""}
我不想做的是必须编写识别字符串的代码("$ if(%disctotal%> = 01,%discno%)"是一个if语句,因为这是一个很难做的事情.
然后扩展这个我希望表达式允许诸如大写字段,检查字段长度等事情.
或者:也许它应该以这种方式工作,用户输入表达式,然后在每个文件的日后,Java代码用实际值替换每个变量
即$ if(%disctotal%> = 01,%discno%) - > $ if(2> = 01,1)
然后将其传递给exopression语言进行解析并给出结果,
这是Javascript的想法吗?
所以我的代码是api的客户端,数据以xml的形式返回,我已经能够从该xml的一些示例中创建有效的xsd文件,然后从模式生成一些JAXB类,这样我的代码现在可以加载并使用xml数据,无需直接使用Xml.
但不幸的是,在api的最新版本中,他们已经放弃了xml支持,只返回json.是否有一个json进程,我可以做类似于我的xml进程?
如果从架构中不可能有解决方案,那么如果我手动创建我的json类,我可以使用它们在原始json数据中自动管理,所以至少我只需要处理一次json.
编辑:也许https://github.com/ko5tik/jsonserializer会很有用
更新:仅供参考,所以我查看了jsonschema2pojo,但这只是从模式中创建了pojos,而我实际上并没有json模式,只是实际的json.我开始创建一个来自我所拥有的示例json的模式但是没有让它为al工作但是最简单的例子.
然后我查看了http://wiki.fasterxml.com/JacksonInFiveMinutes,如果Id设法让它工作,杰克逊将能够使用jsonschema2pojo创建的pojos.所以我接着尝试了这个例子并根据我拥有的json数据创建了一个POJO,这很简单,然后我尝试使用这个完整的数据绑定,它第一次工作.
总而言之,我将使用Jackson来处理webservice返回的json,我将不得不为每个实体手动创建一个POJO,但至少它可以工作.