3

好吧,我遇到了一个错误,它简直把我的 bejeebus 搞糊涂了。我正在寻找关于我可以调查什么的想法,因为现在,我一无所获。它是这样的:

我有一个独立的 Java 应用程序,偶尔需要调整它运行的计算机(WinXP 机器)的 Line-In 音量。它通过调用一对可以获取和设置各种组件卷的外部可执行文件(用 VB6* 编写)来实现这一点。(他们可以处理线路输入、麦克风、Wave、CD 和主音量控制。)

现场有数百台设备,在我公司提供和控制的硬件(戴尔机器)上运行。至少有几十个客户正在使用这个功能,而且它运行良好——除了一个实例。

对于这台麻烦的机器,它根本不起作用。当应用程序运行时,我会观察音量滑块,当音量应该下降时,它们会保持原样。当我检查应用程序的日志文件时,它没有抛出任何错误,并且似乎正在执行降低音量的代码。当我从命令行运行可执行文件时,它们运行良好。

我不能保证这台机器与所有正常运行的机器 100% 相同,但我们已经购买同一系列的戴尔产品已经有一段时间了。至少,它非常非常相似。

所以,把我的困惑变成一个项目符号列表:

  • 如果我在 Java 代码中做了一些愚蠢的事情(即,没有清除我的 STDOUT/STDERR 缓冲区),为什么这只是这台机器上的一个问题?
  • 如果 VB6 可执行文件有问题,为什么它们可以在其他所有机器上以及在这台机器上从命令行运行?
  • 如果这台机器上存在某种硬件异常,那么只有在从 Java 应用程序中调用时,哪种异常会导致音量控制可执行文件失败?

我很迷茫。我不喜欢被混淆。任何人有任何建议可能会导致我的启蒙吗?**

-* -- 我知道,我知道,VB6, 1998 调用并且他们想要他们过时的专有错误生成器,等等。不是我的决定。但代码有效。通常。

-** -- 在这里插入佛教笑话。


更新编辑: 客户服务可能偶然发现了一些东西;这可能与数据库中的客户端配置设置有关。新证据表明,要么为该客户端配置错误,要么我的软件在响应特定配置时做了一些愚蠢的事情。而且这个问题可能比我们想象的更普遍,因为这个特殊的功能不像我想象的那么常用。

回复评论:

  • 调试器:理论上可行,但考虑到我们的设置,这看起来很头疼。
  • High Verbosity Logging,Java:这是个好主意,特别是考虑到问题可能比我最初认为的更普遍。是时候开始重新审视一些假设了。并可能与他们打成一片。就像婴儿海豹一样。
  • High Verbosity Logging,VB6:一种可能性;将需要滚入高冗长的 Java 日志记录以捕获输出,因为我的 VB6-fu 太弱了,我不知道如何将文本输出到文件。但是,是的,知道脚本是否被调用会很有价值。
  • Window Event Viewer:不熟悉这个工具。可能不得不纠正这一点。
  • PATH 问题:感觉不太可能;Java 代码构造了一个看起来不依赖于任何环境变量的可执行文件的相对路径。

感谢人们提供的建议;至少,你让我的大脑朝着有希望的方向发展。


解决方案编辑: 获胜者是……这不是错误,而是功能!一个功能非常糟糕,非常错误。现在将被绝育以不再打扰我们的功能。

一批无效的假设让我无法早点看到它,其中最重要的是“我不需要用更多的调试语句来工具代码——那里已经存在的语句告诉我我需要知道的一切!” DaDaDom,如果你想把你的评论变成答案,里面有一个闪亮的复选标记。

感谢所有提出建议的人。现在,如果你能原谅我,我的头因为与我的办公桌开会而迟到了。

4

3 回答 3

1

嗯。有人告诉我,从 Java 执行程序要么容易,要么困难。最简单的部分是启动它们。困难的部分是处理 I/O 流(请参阅我之前关于使用 Runtime.exec() 的问题)。也许 VB 程序正在或期望在这些 Java 代码不能正常工作的特定机器上做一些奇怪的事情。


编辑:我还找到了Jakarta Commons Exec的链接:

基本原理

从 Java 执行外部进程是一个众所周知的问题领域。它本质上是平台相关的,需要开发人员了解和测试平台特定的行为,例如在 Windows 上使用 cmd.exe 或有限的缓冲区大小导致死锁。JRE 对此的支持非常有限,尽管新的 Java SE 1.5 ProcessBuilder 类更好。

可靠地执行外部进程还可能需要在执行命令之前或之后了解环境变量。在 J2SE 1.1-1.4 中不支持这一点,因为用于检索环境变量的方法 System.getenv() 已被弃用。

目前有几个不同的库为了自己的目的已经围绕 Runtime.exec() 实现了框架来处理上面列出的各种问题。提议的项目应该旨在协调并从这些倡议中学习,以创建和维护一个简单、可重用和经过良好测试的包。由于一些比较有问题的平台不容易获得,我希望广大的 Apache 社区可以提供很大的帮助。

于 2010-01-28T16:54:48.180 回答
1

您是否考虑过经过身份验证的用户可能无权在工作站上编辑音量设置?如果您以“管理员”身份运行,程序是否正常运行?

于 2010-01-28T18:40:12.930 回答
1

这里有一个答案:您可以创建具有详细日志记录的软件版本,或者您甚至可以调试代码吗?至少你可以判断它是在 java 还是 VB 部分。

于 2010-01-29T06:31:55.943 回答