2013-10-24 2 views
0

설명하기가 약간 어렵습니다. 나는 그 문제에 대해 인터넷 검색을 한 적이 있었고 도움이 될 것 같은 것을 찾지 못했습니다. 지금은 IDE를 제한 할 수있는 컴퓨터인지는 모르겠지만 (6GB RAM, AMD A10-5745M APU 2.10GHz, Windows 8 64 비트, IDE가 현재 사용할 수있는 최대 용량은 495M 인 것 같습니다. 그것은 70M을 지나서 본적이 없다.) 내가 문제를 더 설명하기 전에 나의 코드를 공유 할 것이다. 편집 : 오, 그리고 덧붙이 자면, 이것은 기본적으로 내가 작성한 코드 다. 그래서이 방법은 거대한 프로젝트에 있지 않다. 기본적으로 지금까지 내가 작성한 유일한 것.IntelliJ 아이디어 IDE 해석/읽기/처리 코드 느림 (Thread.sleep())

public void readText(String text){ 
     String textArray[]= new String[text.length()]; 
     for(int b = 0; b <text.length(); b++){ 
      String countText = text; 
      textArray[b] = countText.substring(b,b+1); 
     } 

     for(int countPrint = 0; countPrint < textArray.length; countPrint++){ 
      System.out.print(textArray[countPrint]); 
      try { 
       Thread.sleep(50); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

그래서 기본적으로 내 방법은 텍스트를 지연 간격으로 문자 단위로 읽습니다. 따라서 readText("Hello");으로 전화 할 경우 H (50ms 대기) e (50ms 대기) l (etc) 등등을 인쇄하므로 다른 사람이 입력하는 것처럼 보입니다. (나는 타이머를 사용하려고했으나 인터넷 검색을 통해이 사이트에서 을 설치하는 것이 훨씬 쉽고 공간을 적게 차지한다는 것을 알았습니다.)

이제 모든 것을 설명 했으므로 문제는 50 밀리 초와 같이 짧은 밀리 세컨드로 내려 가면 캐릭터별로 문자를 표시합니다. 800 밀리미터를 선택하면 각 문자가 잘 읽히고 거의 초당 1 개씩 뱉어냅니다. 그러나 그것이 빨리 도착할수록 더 덩어리진다. 문구가 "안녕하세요, 개가 노란색이고 잔디밭이 분홍색"이라고 말합니다. 코드가 Thread.sleep(50) 인 것으로 인쇄하려면, (개별 문자를 (매우 신속하지만) 개별적으로 인쇄하는 대신) 청크 chunk1(Hel) chunk2(lo, my) chunk3(dog i) chunk4(s yello) 등으로 인쇄하는 것이 좋습니다. 이제는 IDE로 좁혔습니다. Eclipse에서 동일한 코드를 실행했을 때 거의 완벽하게 인쇄 되었기 때문에 (때로는 덩어리가 인쇄되었지만 실제로는 2 자, 5 또는 6이 아님) Jidea와) Eclipse로는 더 빠른 속도는 시도하지 않았지만, 50ms는 그다지 신경 쓰지 않는 것 같았습니다. 이전보다 훨씬 정확하게 실행했습니다. "실시간"으로 인쇄하지 않는 이유는 무엇입니까?

+0

Idea가 별도의 VM에서 코드를 실행하지 않을 수 있습니까? BTW, 가능한 한 외부 영향을 제외하기 위해 명령 줄에서 그런 것들을 테스트 할 것입니다. 여전히 시스템의로드에 따라 sleep() 호출은 OS에이 코드를 실행하는 JVM을 페이지 아웃 할 수있는 기회를 제공합니다. – Ingo

+0

예. 커맨드 라인에서 .java를 실행하려고 생각했지만 작동하지 않는 것 같았습니다. 기존의 .class가 아닌지 확인했습니다. 동일한 폴더에 있는지 확인 했더라도. 내 환경 변수를 다시 할 필요가 있을지 모르지만, 내가 실행하면 ... 어떤 명령인지는 기억이 나지 않지만 java 및 기타 등등의 버전을 반환하므로 완벽하게 작동합니다. –

+0

명령 줄에서 실행하면 각 문자가 한 번에 하나씩 덩어리없이 완벽하게 실행됩니다. 필자는 ide가 문자를 인쇄하는 방법이라고 생각합니다. –

답변

0

출력에 대한 버퍼링 문제로 인한 가장 좋은 문제는 무엇입니까?

System.out가 버퍼링 (즉, 반드시 당신이 인쇄를 부르지 만, 쓰기, 또는 배치, 복수의 단일 콘솔 쓰기를 호출인쇄를 지연하도록 선택할 수 있습니다 때 터미널 직선 거리를 쓰지 않습니다).

각 문자 다음에 flush (즉, System.out.flush())을 입력하여 도움이되는지 확인해 볼 수는 있지만 간단하지는 않습니다.

IDE에서 터미널 I/O가 얼마나 빨리 발생하는지 걱정하는 것에 주저합니다. 거기에 참여할 수있는 많은 것들이 있으며, 일반적으로 신경 써야 할 부분이 아닙니다. 주의를 기울이면 IDE 내부에서보다 명령 줄에서 실행하는 것이 좋습니다.

+0

OP도 "Eclipse에서 동일한 코드를 실행했을 때 거의 완벽하게 인쇄 되었기 때문에 IDE로 좁혔습니다." – eis

+0

@eis 예를 들었지만 어떤 점을 시도했는지 확실하지 않습니다. 만들거나, 내 대답을 어떻게 바꿀지. – Tim

+0

기본적으로 System.out *을 버퍼링하는 것은 비난 받아서는 안되지만 Idea를 버퍼링하면 안됩니다. System.out은 명령 행을 사용한다고해도 버퍼링되지만, 문제는 보이지 않으므로 버퍼링만으로는 문제가되지 않습니다. – eis