Articles of Java的

Java Runtime.exec在Linux上遇到困难

大家好。 我正在开发一个Java程序,用于Linux环境,创build一个运行另一个Java类的新Java程序,但是我遇到了麻烦。 我终于解决了所有的问题。 调用 Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" }) 在我的Java程序中返回 /bin/bash: /usr/lib/jvm/java-6-openjdk/jre/bin/java -classpath /home/kevin/workspace/Misc/bin HelloWorld: No such file or directory 在stdout / stderr中。 如果我尝试 Runtime.getRuntime().exec(new String[] { "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'" }) 我得到一个Javaexception Cannot run program "/bin/bash -c 'java -classpath /home/kevin/workspace/Misc/bin HelloWorld'": java.io.IOException: error=2, No such file or […]

运行自定义TextSecure(信号)服务器

我试图启动我的自定义TextSecure(信号)服务器。 我希望将它用于Signal的所有function(包括SMS和电话)。 我相信我也需要redphone服务器来运行电话。 我发现只有https://github.com/WhisperSystems/TextSecure-Server的 TextSecure服务器的github仓库,但是没有redphone服务器的仓库。 我想我也需要运行这个服务器https://github.com/WhisperSystems/PushServer来正确操作Signal。 我曾尝试从github下载整个TextSecure服务器,并将其作为maven存储库添加到intelijidea,但它不允许我运行它,因此编译它。 任何人都有运行一个cusotm TextSecure服务器的经验? 我需要一个小指南,因为我总是卡在这个。 感谢前进

Java语音识别

有没有人有任何开源的经验,或相对便宜的语音识别API的Java? 我非常想找一些能把说出来的单词变成文字的东西。 从Sun的Java语音识别页面看来,这似乎是一个相当死亡的东西。 我的要求是至less在Linux上运行的东西。 谁能推荐一些东西? 纯Java将是一个奖金,否则基于Linux的解决scheme可以考虑。 因为这是一个家庭项目…越便宜越好。 编辑 CMU狮身人面像As Amit指出CMU狮身人面像http://cmusphinx.sourceforge.net/html/cmusphinx.php我的问题是一个巨大的字错误率。 培训本身就像一个项目,我希望能在这个周末有所收获。 IBM ViaVoice “ Via Voice”开放源代码在2004年有消息公布。 新闻发布似乎不成熟,而且从未发生。 威盛语音是在某个时候发布的Linux ,但似乎他们停了下来。 似乎在IBM网站上留下的所有内容都是ViaVoiceembedded式的 。 IBM Websphere Voice 我想这就是为什么ViaVoice(桌面)似乎停止。 IBM创build了这个商业解决scheme,这个解决scheme将花费更多的成本。 而使用它将会把你剩下的,至less在我的websphere和他们的IDE的经验之后。 Nuance的 看来他们仍然可能为linux创build产品。 但是我认为他们迷了路,并且跟随IBM进入了服务器市场。 我不太确定这个,他们的网站在寻找有用的信息方面并不友善。 开放的心灵/言论自由 这些人不断改变他们的项目名称。 可能有些钱饥饿的公司一直在威胁他们,但我不知道。 该项目看起来有点死。 我可能会尝试在这周末训练狮身人面像,看看它是否想成为朋友。 否则,更糟糕的情况是,我会考虑使用微软的语音解决scheme。 它在过去一直很好,但它不是一个好的Linux解决scheme。 我可以通过酒来使用它,但是我会有两个独立的服务器…凌乱的凌乱。 哦,什么似乎是一个很好的地方访问语音/语音SpeechTechMag 。 他们有一个“Anual Reference”,其中包含一些与语音/语音有关的公司名单。

如何在linux的classpath中添加多个jar文件

好的,我对linux和命令行非常陌生,对于java来说也是相当新的。 我有一个build立一个Java程序的实习。 我终于完成了我的机器(Windows),现在我必须迁移到一台Linux机器进行testing,然后将其作为可执行文件运行。 我在linux上做了很多的阅读和研究,对classpath有所了解,但是还是很难完全理解。 这只是不为我点击。 任何人都可以用例子简单地解释classpath的目的吗? 其中一个最令人困惑的方面是实际上定义了jar子的物理path。 我是从usr开始的,还是只需要从jvm文件夹开始? 如果有关系,我的java程序不在jvm文件夹中。 任何人都可以为我揭开一些光明吗? 编辑:非常感谢你们的帮助,我不能说我完全清楚,但是我对我的处境的了解要好得多。

列出多个jar文件的内容

我在一堆jar子里search一个.class文件。 jar tf abc.jar 适用于一个文件。 我试过了 find -name "*.jar" | xargs jar tf 什么也不印。 我能想到的唯一解决方法是解压所有,然后search。 有没有更好的办法? 我在LUnix。 编辑 :当扫描很多jar文件时,打印jar文件名和类是很有用的。 这种方法效果很好: find . | grep jar$ | while read fname; do jar tf $fname | grep SchemaBuilder && echo $fname; done 产生的样本输出: 1572 Wed Jul 25 10:20:18 EDT 2007 org/apache/ws/commons/schema/SchemaBuilder$1.class 1718 Wed Jul 25 10:20:18 EDT […]

在Docker容器中运行的JVM的驻留集大小(RSS)和Java总承诺内存(NMT)之间的差异

场景: 我有一个运行在Docker容器中的JVM。 我做了一些内存分析,使用两个工具:1) 顶部 2) Java本机内存跟踪 。 数字看起来令人困惑,我试图找出造成差异的是什么。 题: Java进程报告RSS为1272MB,总Java内存报告为790.55 MB。 我怎样才能解释其余的内存1272 – 790.55 = 481.44 MB去哪里? 为什么我要在SO上看到这个问题之后继续保持这个问题: 我确实看到了答案,解释是有道理的。 但是,从Java NMT和pmap -x获得输出后, 我仍然无法具体映射哪些java内存地址实际上是驻留和物理映射的 。 我需要一些具体的解释(详细的步骤)来找出导致RSS和Java Total Commit内存之间的区别的原因。 顶部输出 Java NMT Docker内存统计信息 图表 我有一个docker集装箱运行超过48小时。 现在,当我看到一个包含以下内容的图: 提供给docker集装箱的总内存= 2 GB Java最大堆= 1 GB 总提交(JVM)=始终小于800 MB 使用的堆(JVM)=始终小于200 MB 使用非堆(JVM)=始终小于100 MB。 RSS =大约1.1 GB。 那么,在1.1 GB(RSS)和800 MB(Java Total Commit内存)之间吃什么呢?

如何重现一个默默丢弃的TCP / IP连接?

我有一种情况,一个Java程序build立一个长期运行的TCP / IP连接到一个服务器,并且所说的连接的function与文档完全一样,除了在我的控制之外的环境中的一件事。 每个星期六,服务器都重新启动,但由于某种原因,这不能正确传达给我的客户端,所以连接只是挂起来等待响应。 这与使用过时的JDBC连接看到的行为完全相同,在服务器和客户端之间的某个路由器发现连接处于空闲状态并在没有通知的情况下将其删除。 我需要能够重现这种情况能够创build一个适当的修复。 因此,我需要知道是否有一个很好的方法来模拟路由器在我的控制下默默地放下连接? 我可以在我的开发环境和服务器之间放置一个Linux机器或Mac。 我可以在虚拟机(vmware播放器)中运行JVM,如果我可以在那里下载的话。 build议是非常受欢迎的。 编辑2012-12-18:为我工作的解决scheme是使用本地的基于Java的SOCKS5代理,可以用Ctrl-Z任意暂停,并告诉我的应用程序通过它。

从Linux内核/ libc版本是什么Java Runtime.exec()安全的内存方面?

在工作中,我们的目标平台之一是运行Linux的内核资源受限的小型服务器(内核2.6.13,基于旧的Fedora Core的自定义分发)。 该应用程序是用Java编写的(Sun JDK 1.6_04)。 Linux OOM杀手被configuration为在内存使用超过160MB时终止进程。 即使在高负载的情况下,我们的应用程序也不会超过120MB,并且与其他一些活动的本地进程一起,我们仍然能够保持在OOM限制之内。 但是,事实certificate,Java Runtime.getRuntime()。exec()方法是从Java执行外部进程的标准方法, 在Linux上有一个特别不幸的实现 ,导致派生subprocess(临时)需要相同数量的内存作为父进程,因为地址空间被复制。 最终的结果是我们的应用程序在我们执行Runtime.getRuntime()。exec()时被OOM杀手所杀害。 我们目前通过一个独立的本地程序来执行所有外部命令,并通过套接字与该程序进行通信。 这不是最佳的。 在网上发布这个问题后,我得到了一些反馈,指出这不应该发生在Linux的“更新”版本上,因为它们使用copy-on-write实现了posix fork()方法,这大概意味着它只会复制它需要的页面在需要的时候修改而不是立即整个地址空间。 我的问题是: 这是真的? 这是内核,libc实现还是其他地方? 从什么版本的内核/ libc /无论是copy-on-write for fork()可用?

如何创build一个Linux群集在Java中运行物理模拟?

我正在开发一个用于执行物理模拟的科学应用程序。 所使用的algorithm是O(n3),所以对于大量数据来说,处理需要很长时间。 应用程序在大约17分钟的时间内运行一个模拟,我必须运行大约25,000次模拟。 这大约是一年的处理时间。 好消息是模拟是完全独立的,所以我可以很容易地改变程序在多台计算机之间分配工作。 我可以看到有多种解决scheme来实现这一点: 获取多核心计算机并将其分配到所有内核中。 对于我需要做的事还不够 编写一个连接到多个“处理”服务器的应用程序,并分配负载。 获得一个廉价的linux电脑集群,并让程序把所有东西当作一个单一的实体。 选项2相对来说比较容易实现,所以我不太关心如何实现这个build议(可以通过编写一个程序来等待参数的给定端口,处理值并返回结果作为序列化文件)。 这将是一个很好的网格计算的例子。 但是,我想知道最后一个select的可能性,一个传统的集群。 在linux网格中运行Java程序有多困难? 将所有单独的计算机都视为具有多个内核的单个计算机,这样就很容易调整程序? 有什么好的资源指针可以让我开始? 或者我使这个过于复杂,我更好select2号? 编辑:作为额外的信息,我感兴趣的是如何实现像这篇文章中描述的从有线杂志: 科学取代超级计算机与PlayStation 3的Linux群集 。 确切地说,第二个听起来像是要走的路…但是酷的因素。 编辑2:计算是非常CPU的限制。 基本上在大matrix上有很多操作,比如反和乘。 我试图寻找更好的algorithm进行这些操作,但到目前为止,我发现我需要的操作是0(n3)(在通常可用的库中)。 数据集很大(对于这样的操作),但是它是基于input参数在客户端上创build的。 我现在看到,我对Linux下的计算机群如何工作有误解。 我假定它的工作原理似乎是所有计算机上的所有处理器都可用,就好像您拥有一个具有多个内核的计算机一样,但似乎并非如此。 似乎所有这些超级计算机的工作方式都是由执行由某个中央实体分配的任务的节点,并且有几个不同的库和软件包允许轻松地执行这种分配。 所以这个问题真的变成了,因为没有第3个这样的东西,那么创build一个集群的java应用程序的最好方法是什么?

用于Ubuntu 10.10的Eclipse 3.6 Helios

我有我的戴尔工作室笔记本电脑上安装的Ubuntu 10.10networking版本。 我下载helios的日食网站,但是当我无法运行它。 我已经从突触包pipe理器下载了eclipse 3.5,但是我无法将eclipse 3.5更新到eclipse 3.6。 是否有任何其他方式来更新eclipse? Eclipse 3.6支持HTML 5。 请让我知道,多谢提前