簡體   English   中英

從Java中的另一個線程訪問變量

[英]Access variable from another thread in Java

我正在研究一個在Java上使用套接字通信的小代碼,並且正在嘗試執行以下操作:

  1. 接收JSON對象並解析[完成]
  2. 如果收到的命令是login則開始登錄[完成]
  3. 將登錄過程的結果打印到套接字上這是我遇到的最后一部分,我的代碼如下:

     public class LoginActivity extends Activity { private Button btnLogin; private Button btnDemo; private EditText edtLogin; private EditText edtSenha; private ProgressDialog pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); btnLogin = (Button)findViewById(R.id.btnLogin); btnDemo = (Button)findViewById(R.id.btnDemo); edtLogin = (EditText)findViewById(R.id.edtLogin); edtSenha = (EditText)findViewById(R.id.edtSenha); pd = new ProgressDialog(this); new Thread(new Runnable(){ public void run(){ try { String inMsg; JSONObject fromClient; String cmd; JSONArray args; ServerSocket server; Socket client; BufferedReader in; PrintWriter out; //TODO: Getting reconnects on a proper method System.out.println("Waiting for client on port 8888"); server = new ServerSocket(8888); client = server.accept(); System.out.println("Just connected to " + client.getRemoteSocketAddress()); in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new PrintWriter(client.getOutputStream(), true); while(true) { inMsg = in.readLine(); if (inMsg == null) { System.out.println("Waiting for client on port 8888"); client = server.accept(); System.out.println("Just connected to " + client.getRemoteSocketAddress()); in = new BufferedReader(new InputStreamReader(client.getInputStream())); out = new PrintWriter(client.getOutputStream(), true); continue; } fromClient = new JSONObject(inMsg); System.out.println("In: " + fromClient); cmd = fromClient.getString("command"); args = new JSONArray(fromClient.getString("args")); if(cmd.equals("login")){ final String login = args.getString(0); final String pwd = args.getString(1); AndroidUtil.mostrarProgressoAguarde(LoginActivity.this, pd); new Thread(new Runnable() { public void run() { PagPop.getInstance().logar(LoginActivity.this, login, pwd, new ServidorListener<Cliente>() { @Override public void recebeuResposta(String mensagem, RespostaServidor<Cliente> resposta) { handleResposta(mensagem, resposta); } }); } }).start(); //out.println(mensagem); } else { out.println("Received"); } } } catch (Exception e) { e.printStackTrace(); } } }).start(); btnLogin.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { final String login = edtLogin.getText().toString(); final String senha = edtSenha.getText().toString(); System.out.print("Tentando Logar"); AndroidUtil.mostrarProgressoAguarde(LoginActivity.this, pd); new Thread(new Runnable() { public void run() { PagPop.getInstance().logar(LoginActivity.this, login, senha, new ServidorListener<Cliente>() { @Override public void recebeuResposta(String mensagem, RespostaServidor<Cliente> resposta) { handleResposta(mensagem, resposta); } }); } }).start(); } }); 

在代碼中間,我嘗試在//out.println(mensagem);上打印出所需的變量//out.println(mensagem); 如果我嘗試編譯我的代碼,則會發生以下情況:

[javac] /android/demo/LoginActivity.java:107:錯誤:從內部類內部訪問局部變量out; 需要宣布為最終

[javac] out.println(mensagem);

怎樣才能我要么運輸變量mensagem離開那里,所以我可以out.println從它if水平或訪問out從不做這種方法out最后?

PrintWriter out聲明為活動/片段中的全局變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM