亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在嘗試獲取 php 輸出時在 bufferedreader 中附加字符串時應用程序凍結

在嘗試獲取 php 輸出時在 bufferedreader 中附加字符串時應用程序凍結

PHP
嗶嗶one 2023-06-24 17:25:50
我正在嘗試編寫一個使用 php 二進制文件啟動服務器的應用程序。但是,當我使用 BufferedReader 讀取 /data/data/com.mycompany.myapp/php 的輸出時,我的應用程序在 while 語句中附加輸出行時凍結。我該如何解決?as.copy("php", new File("/data/data/com.mycompany.myapp"));Runtime.getRuntime().exec("/system/bin/chmod 744 /data/data/com.mycompany.myapp/php");new File("/data/data/com.mycompany.myapp/php").setExecutable(true);new File("/sdcard/PocketMine-MP/PocketMine-MP.phar").setExecutable(true);Runtime.getRuntime().exec("/system/bin/chmod -R 777 /sdcard/PocketMine-MP");        String[] startserver = {"/data/data/com.mycompany.myapp/php","/sdcard/PocketMine-MP/PocketMine-MP.phar","eng"};final ProcessBuilder processbuilder = new ProcessBuilder(startserver);processbuilder.directory(new File("/data/data/com.mycompany.myapp"));processbuilder.environment().put("TMPDIR","/sdcard/PocketMine-MP/tmp");processbuilder.redirectErrorStream();        java.lang.Process process = processbuilder.start();InputStream is = process.getInputStream();BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));         StringBuilder builder = new StringBuilder();while(br.readLine() != null){    builder.append(br.readLine()+"\n");}t.append(builder);}catch(Exception e){    Toast.makeText(getApplicationContext(),e.toString(),Toast.LENGTH_LONG).show();}           }}
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

進程在 ProcessBuilder.start() 之后明顯暫停一段時間的原因通常與您的應用程序在生成 stdout 和 stderr 流時未使用它們有關。您可以通過將它們定向到文件并在proc.waitFor結束后從文件中讀取來快速測試這一點。添加:


File outf = new File(TEMPDIR, "run.out");

File errf = new File(TEMPDIR, "run.err");

pb.redirectOutput(outf);

pb.redirectError(errf);

如果有效,請繼續使用文件重定向或設置 Runnable/Thread 來使用 getInputStream / getErrorStream。


查看完整回答
反對 回復 2023-06-24
  • 1 回答
  • 0 關注
  • 174 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號