2013-02-20 2 views
0

Я создал код Java (форма JFrame для swing GUI), который вызывает кнопку другого класса (которая находится в другом проекте) при нажатии кнопки, но мне нужно, чтобы я дважды нажал кнопку чтобы успешно вернуть значение из вызываемой функции. Есть ли решение?java remote function требуется вызывать дважды

вот мой код,

ГИП

package aarib; 

import java.awt.*; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import AlKhalil.ui.Aarib; 

public class GUI extends javax.swing.JFrame { 

    public String Input; 
    public String Lexems; 
    public Aarib A; 

public GUI() { 
     initComponents(); 
     A = new Aarib(); 
     jTextField1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 
     jLabel2.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); 

    } 
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
     // TODO add your handling code here: 

     if(jTextField1.getText().isEmpty()) 
     { 
      jLabel2.setText("No input"); 
     } 
     else{ 
      Input = jTextField1.getText().toString(); 
      A.inputText= Input; 
      try { 

       Lexems = A.LexicalAnalysis(); 
       jLabel2.setText(Lexems); 

      } catch (Exception ex) { 
       jLabel2.setText("Error"); 
       Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, null, ex); 
      } 

     } 
    } 
} 

и функция дистанционного

package AlKhalil.ui; 
import java.util.*; 
import java.util.List; 
import AlKhalil.token.*; 
import AlKhalil.analyse.*; 
import AlKhalil.*; 
import AlKhalil.result.*; 


public class Aarib { 

    public Analyzer analyzer; 
    public String myResult=""; 
    public String inputText=""; 

    public Aarib() { 
     Settings settings = new Settings(); 
     analyzer = new Analyzer(); 

    } 

    public String LexicalAnalysis() throws Exception { 

     Thread t = new Thread() 
     { 
      public void run() 
      { 
      //some code 
        ... 
        ... 
        ... 
      } 
     }; 

     t.start(); 
     return myResult; 
    } 
} 

Заранее спасибо :)

ответ

0

Решение ждать результата произведенных в нитке t. С вашим текущим кодом вы запускаете параллельный поток и мгновенно возвращаете атрибут myResult. При втором нажатии на кнопку myResult (в большинстве случаев) заполняется потоком и возвращается после запуска другого параллельного потока, выполняющего расчет.

Я предлагаю рассмотреть какой-то образец наблюдателя для вашей программы. Затем ваш графический интерфейс должен анализировать поток вычислений и получать уведомление о результате, который затем будет обрабатываться.

Но поскольку мы все не видим код, выполняемый в потоке, и, пока вы ждете окончания потока, почему бы просто не использовать поток.

+0

Спасибо за помощь :) Я добавил этот время (t.isAlive()) {} перед тем возвращение myResult; и он сработал :) – user2090737

+0

@ user2090737 Тогда в чем смысл начать тему? – blank