2010-01-28 4 views
3

좋아요, 나는 베지 버스를 혼란에 빠뜨린 버그를 맞았습니다. 나는 조사 할 수있는 것이 무엇인지에 대한 아이디어를 찾고 있습니다. 왜냐하면 지금 당장은 아무것도 얻지 못했기 때문입니다.Java 프로그램 내에서 외부 실행 파일을 호출하지 못하는 경우

실행중인 컴퓨터의 Line-In 볼륨 (WinXP 시스템)을 때때로 흔들 필요가있는 독립형 Java 응용 프로그램이 있습니다. 다양한 구성 요소 볼륨을 가져오고 설정할 수있는 외부 실행 파일 (VB6 *로 작성)을 호출하여이 작업을 수행합니다.

현장에서 회사에서 제공하고 제어하는 ​​하드웨어 (Dell 시스템)에서 실행되는 수백 개의 장치가 있습니다. 적어도 수십 명의 고객이이 기능을 사용하고 있으며 하나의 인스턴스를 제외하고는 완벽하게 작동합니다.

이 고장난 기계의 경우 단순히 작동하지 않습니다. 앱이 실행 중일 때 볼륨 슬라이더를보고 볼륨이 떨어지면 그대로 두었습니다. 앱의 로그 파일을 확인하면 오류가 발생하지 않으며 은 볼륨을 삭제하는 코드를 실행하고있는 것처럼 보입니다. 명령 줄에서 실행 파일을 실행하면 완벽하게 작동합니다.

제대로 작동하는 모든 기계와이 기계가 100 % 동일한 것은 보증 할 수는 없지만, 지금 당분간 같은 라인의 Dell을 구매했습니다. 맨 처음에는 아주 비슷합니다.

그래서, 글 머리 기호 목록에 내 혼란을 돌려 : 왜이에서만 문제가

  • 내가 자바 코드에서 바보 같은 (즉, 내 STDOUT/STDERR 버퍼를 삭제하지 않음)하고있어 경우입니다 기계?
  • VB6 실행 파일에 문제가있는 경우 명령 줄에서이 컴퓨터의 다른 모든 컴퓨터 에서이 컴퓨터가 작동하는 이유는 무엇입니까?
  • 하드웨어에 이상한 점이 있다면, Java 응용 프로그램에서 호출 할 때 볼륨 제어 실행 파일이 실패하면 이 될 수 있습니다.

나는 매우 혼란 스럽다. 나는 혼란스러워하지 않는 것을 좋아합니다. **

- * - 나는 VB6, 1998를 알고 있으며, 노화 된 독점적 인 버그 생성기를 다시 원한다는 것을 알고있다. 내 결정이 아니었다. 그러나 코드는 작동합니다. 보통.

- ** - 여기에 불교 농담을 삽입하십시오.


업데이트 편집 : 고객 서비스가 뭔가에 발견했을 수 있습니다; 데이터베이스의 클라이언트 구성 설정과 관련이있을 수 있습니다. 새로운 증거는 클라이언트 나 소프트웨어에 잘못 구성된 것이 특정 구성에 대한 응답으로 무언가를하고 있다는 것을 보여줍니다. 그리고 문제는 우리가 생각한 것보다 더 널리 퍼져있을 수 있습니다. 왜냐하면이 특정 기능이 생각만큼 일반적으로 사용되지 않기 때문입니다.

  • 디버거 :

    의견에 응답 이론적으로 가능은하지만, 우리의 설치 주어진 엄청난 두통처럼 보인다.

  • 높은 자세한 로깅, Java : 특히이 문제보다 좋은 아이디어는 원래 생각했던 것보다 더 널리 퍼져있을 수 있습니다. 몇 가지 가정을 재검토하기 시작할 시간. 그리고 아마도 그들을 단결시킬 수도 있습니다. 아기 물개처럼.
  • 높은 자세한 로깅, VB6 : 가능성; VB6-fu가 너무 약해서 텍스트를 파일로 출력하는 방법을 알지 못하기 때문에 출력을 트랩하기 위해 높은 수준의 Java 로깅에 롤백해야합니다. 그러나 스크립트가 호출되는지 여부를 아는 것이 중요합니다.
  • 창 이벤트 뷰어 :이 도구에 익숙하지 않습니다. 그것을 바로 잡아야 할 수도 있습니다.
  • PATH 문제 : 가능성이 낮습니다. Java 코드는 모든 환경 변수에 의존하는 것처럼 보이지 않는 실행 파일에 대한 상대 경로를 구성합니다.

사람들이 제공 한 제안에 대해 감사드립니다. 최소한 당신은 내 두뇌를 유망한 방향으로 움직였습니다.


솔루션 편집 : 그리고 우승자는 그 기능의, 즉하지 벅스 ...입니다! 기능이 무섭게, 끔찍하게 잘못되었습니다. 우리를 괴롭히지 않게하기 위해 이제는 중성화 될 기능.

일련의 부적절한 가정은 나를 더 빨리 보지 못하게했습니다. "더 많은 디버그 명령문으로 코드를 도구화 할 필요가 없습니다. 이미 거기에있는 문장이 나에게 필요한 모든 것을 말하고 있습니다. 알고있다!" DaDaDom, 답장으로 설명을 바꾸려면 반짝이는 체크 표시가 나타납니다.

의견을 제안 해 주신 모든 분들께 감사드립니다. 실례합니다. 내 책상으로 회의가 늦었습니다.

+0

+1 "1998 called";) –

+0

자세한 로깅으로 소프트웨어 버전을 만들 수 있습니까? 아니면 코드를 디버깅 할 수 있습니까? 적어도 자바 또는 VB 부분에 있는지 알 수 있습니다. –

+0

Windows 이벤트 뷰어에 어떤 것이 있습니까? 디버거를 사용하여 앱을 실행 해 보셨습니까? – McDowell

답변

1

다음은 답변입니다. 자세한 로깅을 사용하여 소프트웨어 버전을 만들 수 있습니까? 아니면 코드를 디버깅 할 수 있습니까? 적어도 자바 또는 VB 부분에 있는지 알 수 있습니다.

1

흠. 나는 자바로부터 프로그램을 실행하는 것이 쉽거나 어렵다고 들었다. 쉬운 부분은 그들을 시작하는 것입니다. 어려운 부분은 I/O 스트림을 처리합니다 (my earlier question on using Runtime.exec() 참조). 어쩌면 VB 프로그램이 Java 코드가 제대로 작동하지 않는 이상한 머신에서 뭔가 이상한 일을하고 있거나 기대하고있을 수도 있습니다.


편집 :

이론적 근거

자바에서 잘 알려진 문제 영역을 외부 프로세스입니다 실행 : 나는 또한 Jakarta Commons Exec에 대한 링크를 발견했다. 플랫폼에 종속적이며 플랫폼 고유의 동작 (예 : Windows에서는 cmd.exe, 교착 상태를 유발하는 제한된 버퍼 크기 사용)을 알고 테스트해야합니다. 이것에 대한 JRE 지원은 매우 제한적입니다. 새로운 Java SE 1.5 ProcessBuilder 클래스가 더 좋을지라도.

외부 프로세스를 안정적으로 실행하려면 명령을 실행하기 전후에 환경 변수에 대한 지식이 필요합니다. J2SE 1.1-1.4에서는, 환경 변수를 얻기위한 System.getenv() 메소드가 사용되지 않기 때문에, 이것을 지원하지 않습니다.

현재 위에서 설명한 여러 가지 문제를 처리하기 위해 Runtime.exec() 주위에 프레임 워크를 구현 한 여러 다른 라이브러리가 있습니다. 제안 된 프로젝트는 간단하고 재사용이 가능하며 잘 테스트 된 패키지를 만들고 유지 관리하기 위해 이러한 계획을 조정하고 학습하는 것을 목표로해야합니다. 문제가 많은 플랫폼 중 일부는 쉽게 사용할 수 없기 때문에 광범위한 Apache 커뮤니티가 큰 도움이 될 수 있기를 바랍니다.

+0

VB 호출은 매우 직관적이어서 찾고있는 환경 변수가 엉망입니다. 물론 당신이 틀렸다는 것을 의미하지는 않습니다. :-) 자카르타 커먼즈 이그제큐티브에 관해서는, 시도해 볼만한 가치가 있습니다. – BlairHippo

+0

행운을 빈다. (정말 소름 끼치는 버그 같아) –

+0

고마워. 그리고 +1은 자카르타 커먼즈 이그제큐티브에서 나를 가리킨다. 여기가 내 솔루션이 될 것이라고 생각하지는 않지만 상자의 다른 도구는 언제나 환영합니다. – BlairHippo

1

인증 된 사용자에게 워크 스테이션의 볼륨 설정을 편집 할 수있는 권한이 없을 수도 있습니다. '관리자'로 실행하면 프로그램이 올바르게 실행됩니까?

+0

저는이게 그게 아니라고 확신합니다. 그러나 설명 된 행동에 완벽하게 부합하는 피 묻은 영리한 생각은 +1입니다. – BlairHippo

관련 문제