2013-09-05 3 views
0

Eclipse를 사용하여 SWT 애플리케이션을 개발 중입니다. 다음 코드는 매킨토시에 윈도우에서 작동하지만 :Mac OSX에서 JfileChooser.showOpenDialog가 중단되는 이유는 무엇입니까?

showOpenDialog 입력하면
import javax.swing.JFileChooser; 

public class Test { 
    public static void main(String[] args) { 
     final JFileChooser fc = new JFileChooser(); 
     int ret = fc.showOpenDialog(null); 
     System.out.println("ret = " + ret); 
    } 
} 

는, 맥 커서가 계속 회전하고, 나는 Java 콘솔에서 다음을 얻을 : 나는 자바를 시도했습니다

2013-09-05 08:20:40.568 java[1271:707] [Java CocoaComponent compatibility mode]: Enabled 
2013-09-05 08:20:40.569 java[1271:707] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000 
2013-09-05 08:20:41.227 java[1271:dd03] *** -[NSConditionLock unlock]: lock (<NSConditionLock: 0x7fa211e82600> '(null)') unlocked when not locked 
2013-09-05 08:20:41.227 java[1271:dd03] *** Break on _NSLockError() to debug. 

1.6, 자바 1.7. 설정하려고 시도했습니다. -Dcom.apple.awt.CocoaComponent.CompatibilityMode=false -XstartOnFirstThread 하지만 아무런 효과가 없습니다.

이것은 정말 기본적인 것이어야합니다. 내가 뭘 놓치고 있니?

+0

SWT의 어떤 버전입니까? –

답변

0

이 프로그램은 초 미만에 내 Mac에서 잘 실행 및 반환 :

import java.io.*; 
import javax.swing.*; 
import javax.swing.filechooser.*; 

/** to isolate and understand why JFileChooser is blocking. */ 
public class DebugJFC { 

    public static void main(String[] args) { 
     System.err.println("JFileChooser "); 
     JFileChooser listFC= new JFileChooser("."); 
     System.err.println("done"); 
     } 

    } 

내가 리눅스에서 실행하면 "JFileChooser를"을 인쇄 후 "완료"를 인쇄하기 전에 중단됩니다. 더 나아가 "new JFileChooser"진술은 수년 동안 리눅스에서 일해 왔으며 오늘날에만 실패하기 시작했습니다. 그게 뭐야?

리눅스 :> 자바 -version 자바 버전 "1.7.0_45" 자바 (TM) SE 런타임 환경 자바 핫스팟 (TM) 64 비트 서버 VM (1.7.0_45-B18를 구축) (24.45-B08를 구축 혼합 모드)

맥 :> 자바 -version 자바 버전 "1.6.0_65" 자바 (TM) SE 런타임 환경 (1.6.0_65-b14-462-11M4609를 구축) 자바 핫스팟 (TM)를 64 비트 서버 VM (빌드 20.65-b04-462, 혼합 모드)

+0

문제가 해결되었습니다. 갓즈. 벽에서 완전히 벗어났습니다 ... Mac을 사용하는 X11 서버가 멈추었지만 모릅니다. 문제가있는 것으로 보이는 프로그램은 다른 컴퓨터에서 원격으로 실행중인 Java 프로그램입니다. 연결은 무엇입니까 ?? JFileChooser의 인스턴스가 Java에 의해 생성 될 때 X를 쿼리하여 나중에 선택기 메뉴를 표시 할 공간을 예약하려고합니다. 물론 X는 멈춘다는 오류 메시지를 제공하지 않습니다. 그리고 Java는 결코 문제를 파악하지 못합니다. 내 X 서버를 죽이고 다시 시작하여 전체 문제를 해결했습니다. –

2

모두에게 같은 문제가있는 좋은 하루!

어쩌면이 답변에 너무 늦었 겠지만이 문제가있는 사용자에게 도움이 될 수 있습니다.

일부 연구 후 LookAndFeel을 가지고 놀려고합니다. 그런 다음 "showSaveDialog()"를 열면 모양과 느낌이 바뀌므로 작동하는 것 같습니다. 나는 그것이 100 %의 시간 동안 작동한다는 것을 보증 할 수는 없지만, 지금까지는 나에게 잘 해냈다. ("끊지 못했다 :)"). 그것은 그 맥 OS X

private File saveFile() { 
    String osName = System.getProperty("os.name"); 
    String homeDir = System.getProperty("user.home"); 
    File selectedPath = null; 
    if (osName.equals("Mac OS X")) { 
     System.setProperty("apple.awt.fileDialogForDirectories", "true"); 
     FileDialog fd = new FileDialog(f, "Choose a file", FileDialog.LOAD); 
     fd.setDirectory(homeDir); 
     fd.setVisible(true); 
     String filename = fd.getDirectory(); 
     selectedPath = new File(filename); 
     if (filename == null) { 
      System.out.println("You cancelled the choice"); 
     } else { 
      System.out.println("You chose " + filename); 
     } 
     System.setProperty("apple.awt.fileDialogForDirectories", "true"); 
    } else { 
     fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 
     fc.setCurrentDirectory(new File(homeDir)); 
     fc.setAcceptAllFileFilterUsed(false); 
     fc.showOpenDialog(null); 
     selectedPath = fc.getSelectedFile(); 
    } 
    return selectedPath; 
} 

코드에 대한 사용자 FileDialogg에 더 완벽하지 않지만 유 :

요점 :

// 업데이트 : 실패를 다시 경우 : 여기에 병이 보고서는 내 코드입니다

관련 문제