3

よし、私は単純に bejeebus を混乱させるバグに遭遇しました。今は何も得られないので、調査できることについてのアイデアを探しています。次のようになります。

スタンドアロンの Java アプリケーションがあり、それが実行されているコンピューター (WinXP マシン) の Line-In ボリュームをときどきいじる必要があります。これは、さまざまなコンポーネント ボリュームを取得および設定できる外部実行可能ファイル (VB6* で記述) のペアを呼び出すことによって行われます。(Line-In、Mic、Wave、CD、およびマスター ボリューム コントロールを処理できます。)

現場には数百台のユニットがあり、私の会社が提供して制御するハードウェア (Dell マシン) で実行されています。少なくとも数十のクライアントがこの機能を使用しており、1 つのインスタンスを除いて完全に機能しています。

この 1 つのトラブルメーカー マシンでは、まったく機能しません。アプリの実行中に音量スライダーを見て、音量が下がるはずのときにそのままにしておきます。アプリのログ ファイルを確認すると、エラーは発生せずボリュームを削除するコードを実行しているようです。コマンドラインから実行可能ファイルを実行すると、完全に機能します。

このマシンが、正常に動作しているすべてのマシンと 100% 同一であるとは保証できませんが、かなり長い間、同じ製品ラインの Dell を購入しています。少なくとも、非常によく似ています。

だから、私の混乱を箇条書きリストに変えてください:

  • Java コードで愚かなことをしている (つまり、STDOUT/STDERR バッファをクリアしていない) 場合、なぜこのマシンだけの問題なのですか?
  • VB6 実行可能ファイルに何か問題がある場合、コマンド ラインから他のすべてのマシンとこのマシンで動作するのはなぜですか?
  • このマシンに何らかの異常なハードウェアがあるとすれば、Java アプリケーション内から呼び出された場合にのみ、ボリューム コントロールの実行可能ファイルが失敗する原因となる異常はどのようなものでしょうか?

私は非常に混乱しています。私は混乱するのが好きではありません。私の悟りにつながるかもしれない提案はありますか? **

-* -- 1998 年に VB6 から電話があり、彼らは時代遅れになった独自のバグ ジェネレーターを元に戻したいなどと言っています。私の決定ではありませんでした。しかし、コードは機能します。いつもの。

-** -- ここに仏教のジョークを挿入します。


更新編集: カスタマーサービスが何かに遭遇した可能性があります。データベース内のクライアント構成設定に関係している可能性があります。新しい証拠は、そのクライアントに対して何かが誤って構成されているか、特定の構成に応答して私のソフトウェアが何か愚かなことをしていることを示唆しています。そして、この特定の機能が私が思っていたほど一般的に使用されていないため、問題は私たちが思っていたよりも広範囲に広がっている可能性があります.

コメントへの対応:

  • Debugger: 理論的には可能ですが、私たちのセットアップでは大きな頭痛の種のようです。
  • High Verbosity Logging、Java: これは良い考えです。特に、問題が当初考えていたよりも広範囲に広がっている可能性があることを考えると。いくつかの仮定を再検討する時が来ました。そして、おそらくそれらをクラブします。赤ちゃんアザラシのように。
  • 高詳細ログ、VB6: 可能性あり。私の VB6-fu は哀れなほど弱いので、テキストをファイルに出力する方法がわかりません。しかし、ええ、スクリプトが呼び出されているかどうかを知ることは価値があります。
  • Window Event Viewer: このツールに慣れていません。それを修正する必要があるかもしれません。
  • PATH の問題: 可能性は低いと思います。Java コードは、環境変数に依存しているようには見えない実行可能ファイルへの相対パスを作成します。

人々が提供した提案に感謝します。少なくとも、あなたは私の脳を有望な方向に動かしてくれました.


解決策の編集: そして勝者は...それはバグではなく、機能です! 機能が恐ろしく、ひどく間違っていました。私たちを悩ませないようにするために去勢される機能。

一連の無効な仮定により、私はすぐにそれを見ることができませんでした。そのうちの少なくとも 1 つは、「コードにデバッグ ステートメントを追加する必要はありません。既にそこにあるステートメントは、私が知る必要があるすべてを教えてくれます!」というものでした。DaDaDom さん、コメントを回答に変えたい場合は、光沢のあるチェックマークが表示されます。

提案を寄せてくれたすべての人に感謝します。すみません、机との打ち合わせに頭が遅れています。

4

3 に答える 3

1

認証されたユーザーがワークステーションのボリューム設定を編集する権限を持っていない可能性を考慮しましたか? 「管理者」として実行した場合、プログラムは正しく実行されますか?

于 2010-01-28T18:40:12.930 に答える
1

うーん。Java からプログラムを実行するのは簡単か難しいかのどちらかだと言われました。簡単な部分はそれらを起動することです。難しい部分は、I/O ストリームを処理することです (私の以前の質問である Runtime.exec() の使用を参照してください)。おそらく、VB プログラムは、これらの特定のマシンで、Java コードが適切に動作しない何か奇妙なことを行っているか、予期しています。


編集: Jakarta Commons Execへのリンクも見つけました:

根拠

Java から外部プロセスを実行することは、よく知られた問題領域です。これは本質的にプラットフォームに依存しており、開発者はプラットフォーム固有の動作を把握してテストする必要があります。これに対する JRE のサポートは非​​常に限られていますが、新しい Java SE 1.5 ProcessBuilder クラスのほうが優れています。

外部プロセスを確実に実行するには、コマンドの実行前または実行後に環境変数の知識が必要になる場合もあります。J2SE 1.1-1.4 では、環境変数を取得するメソッド System.getenv() が推奨されないため、これはサポートされていません。

現在、上記のさまざまな問題を処理するために、独自の目的で Runtime.exec() の周りにフレームワークを実装しているいくつかの異なるライブラリがあります。提案されたプロジェクトは、これらのイニシアチブを調整して学習し、シンプルで再利用可能で十分にテストされたパッケージを作成および維持することを目的とする必要があります。問題のあるプラットフォームの一部はすぐに利用できないため、幅広い Apache コミュニティが大きな助けになることを願っています。

于 2010-01-28T16:54:48.180 に答える
1

ここに答えがあります。詳細なログを記録するソフトウェアのバージョンを作成できますか、それともコードをデバッグできますか? 少なくとも、それが Java 部分にあるのか VB 部分にあるのかはわかります。

于 2010-01-29T06:31:55.943 に答える