2012-07-03 3 views
4

부모님을 위해 디지털 포토 카메라에서 '내 문서'폴더로 파일을 복사하는 간단한 프로그램을 작성 중입니다. 그들은 항상 자신의 사진을 카메라에서 가져 오기 위해 내 도움이 필요합니다. (그렇게 기술적으로 진보하지 않습니다.) 그래서 도움을 주기로했습니다. 복사기라고 불렀습니다. 나는 자바에 적합한 USB 수신기를 찾을 수 없습니다 때문에, 나는 하나에게 자신을 썼다 :자바 스크립트가 SystemTray에 숨어있을 때 멈추다

private void sync() 
{ 
    // All devices in an ArrayList 
    File[] roots = File.listRoots(); 
    ArrayList<File> newList = new ArrayList<File>(); 
    for(File f : roots) 
    { 
     newList.add(f); 
    } 

    // Delete unavailable devices 
    ArrayList<File> removeThese = new ArrayList<File>(); 
    for(File f : devices) 
    { 
     if(!newList.contains(f)) 
     { 
      removeThese.add(f); 
     } 
    } 
    devices.removeAll(removeThese); 

    // Add unknown devices 
    for(File f : newList) 
    { 
     if(!devices.contains(f) && f.canRead() && f.canWrite()) 
     { 
      alarm(f); // Called when new device inserted 
      devices.add(f); 
     } 
    } 
} 

이 방법은 별도의 스레드에서 모든 1000MS라고하고 나는 할 것 같아요. 인정합니다. 이것은 더러운 방법이지만 작동합니다. 나는이 기능을 자주 테스트했고 나는 항상 원하는 결과를 얻었다. 내 programm을 계속 만들었을 때 프로그램을 SystemTray에 숨길 때 스레드가 새 장치를 감지하지 못하는 것으로 나타났습니다. 다시 열면 검색 스레드가 여전히 작동하지 않습니다. 아무도이 문제의 원인과 해결 방법을 말할 수 있습니까?

+0

을 1000ms마다 호출하는 대신,이를 호출하는 .bat 파일을 작성하고 데스크톱에 배치하십시오. 나는 그들이 기술이별로 없다고해도 "DOUBLE-CLICK"을 할 수 있다고 믿는다;) – alfasin

+0

컴퓨터 드라이버를 작성하고 부모님 께 설치하는 것이 덜 어려울 것 같습니다. : D – Wug

+0

폴링 스레드가 시작되는 지점에서 어떤 일이 발생하는지 살펴보십시오. 어떻게 든 중단됩니까? – Wolfgang

답변

2

사용자가 삽입 한 데이터를 저장하면 새로운 장치가 감지되지 않았습니다. 이것은 나를 어리석게 만들었 기 때문에이 사실을 알게 해주셔서 감사드립니다.

public boolean saveSettings() 
{ 
    File f = new File(fsv.getHomeDirectory() + File.separator + "settings.cms"); 
    ObjectOutputStream objOut; 
    try 
    { 
     // Here was my problem. 
     detector.stopDetection(); 

     if(gui.saveSettings()) 
     { 
      // Settings-file wegschrijven 
      objOut = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(f))); 
      objOut.writeObject(settings); 
      objOut.flush(); 
      objOut.close(); 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
    catch (IOException e) 
    { 
     handleExceptions(e); 
     return false; 
    } 
} 
관련 문제