2012-10-26 2 views
0

파일에서 각 행을 읽습니다. 메뉴에 추가하십시오. 이러한 명령을 실행하고 싶습니다. 하지만 클릭 할 때 null 명령 오류가 발생했습니다.그룹 메뉴 항목을 만들고 실행하십시오. vala

입심-CRITICAL ** : g_spawn_command_line_async!

extern void foo(F c); 
delegate void F(); 
void main() { 
    string? line; 
    while ((line = stdin.read_line())!=null) { 
    foo(() => { stdout.puts(line);}); 
    } 
} 

그리고 line은 다음과 같습니다 주장`COMMAND_LINE = NULL은 '나는 간단한 테스트 케이스를 만든

ImageMenuItem menuApp; 

void create_menuSystem() { 
    menuSystem = new Menu(); 
    var menuSep = new SeparatorMenuItem(); 
    //read ~/.config/traytool/app 
    var file = File.new_for_path(GLib.Environment.get_variable("HOME") + "/.config/traytool/app"); 
    if(file.query_exists()) { 
     try { 
      var dis = new DataInputStream(file.read()); 
      string line; 
      while((line = dis.read_line(null)) != null) { 
       menuApp = new ImageMenuItem.with_label(line); 
       menuApp.activate.connect(() => { 
        spawn_command_line_async(line); // <----- here 
        stdout.printf("..%s\n", line); 
       }); 
       menuSystem.append(menuApp); 
      } 
     } catch(Error e) { 
      error("%s", e.message); 
     } 
     menuSystem.append(menuSep); 
    } 
} 

답변

1

실패 참고로만 들었다 :

_data1_->line = _tmp1_; 
_tmp2_ = _data1_->line; 
if (!(_tmp2_ != NULL)) { 
    break; 
} 
foo (____lambda2__f, _data1_); 

이 문제를 해결하려면 닫을 때 소유권이 필요하거나 수행 할 수 없거나 값을 유지해야합니다. 클로저의 색인으로 계속 참조되는 Gee.ArrayList에 넣을 수 있습니다. 또는 ImageMenuItem에 추가 필드/속성을 추가 할 수 있습니다.

관련 문제