2016-12-02 24 views
0

私のプロジェクトでは、ローカルディスクから大きなモデルを読み込むメソッドがあります。モデルの読み込みには約15分かかります。私は、モデルを一度読み込んでから別のクラスからモデルをロードする実行可能なメソッドを作成し、このメソッドを呼び出してコードを実行することを考えています。 実際、私はそれを達成する方法がわかりません、あなたは私を案内してくれますか?ここで は、単純な擬似コードです:私の心の中で異なるクラスから実行可能メソッドを呼び出す

// class A has two method , load the model , and does some calculation 
Class A: 1.Runnable method: LoadModel(); 
      2.Mehtod2: distance(); 
// here i would like to run this programe anytime, pass some parameters and call the method "distance" in class A 
Class B: 1.import Loadmodel() class and invoke distance(); 

私は、サーバーのようなものではなく、サーバーを作成したいと思います:)更新

:以下のコードは、私がこれまで試したものです。

public class load implements Runnable { 

    WordVectors wordVectors; 

    public void run() { 
     try { 
      load(); 
     } catch (FileNotFoundException ex) { 
      java.util.logging.Logger.getLogger(load.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (UnsupportedEncodingException ex) { 
      java.util.logging.Logger.getLogger(load.class.getName()).log(Level.SEVERE, null, ex); 
     } 

    } 

    public void load() throws FileNotFoundException, UnsupportedEncodingException { 
     //Your display method implementation. 
      wordVectors = WordVectorSerializer.loadTxtVectors(new File("glove.twitter.27B.200d.txt")); 
    } 

    public double Simmiraty(String a, String b){ 
     return wordVectors.similarity(a,b); 
    } 

    public static void main(String[] args) { 
     load Obj= new load(); 
     Obj.run(); 
    } 
} 

セカンドクラス:

public class B{ 

    public static void main(String[] args) throws Exception { 
     load ob =new load(); 
     System.out.println(ob.Simmiraty("iphone", "battery")); 
    } 
} 

私は上記のコードでprolemする必要があります。 1.それはモデルをロードした後、それが実行を停止します。 2. fristクラスからメソッドを呼び出すことはできません。

+0

あなたのコードは読み込みできません。stackoverflowコードブロック機能を使用してください。 – SachinSarawgi

答えて

0
public class Load implements Runnable{ 

    private InputStream stream; 
    private static final Load instance; 
    private WordVectors wordVectors; 

    static { 
     instance = new Load(); 
     instance.run(); 
    } 

    public static Load GetLoad(){ 
     return instance; 
    } 

    private Load(){ 
     if(instance != null) 
      throw new UnsupportedOperationException(); 
    } 

    public voir run() { 
     if(wordVectors != null) 
      throw new UnsupportedOperationException(); 
     try { 
      load(); 
     } catch (Exception ex) { 
      Logger.getLogger(load.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    public void load() throws FileNotFoundException, UnsupportedEncodingException { 
     stream = new InputStream(new File("glove.twitter.27B.200d.txt")); 
     wordVectors = WordVectorSerializer.loadTxtVectors(stream,false); 
    } 

    public void interrupt(){ 
     if(stream != null) 
      stream.close(); 
    } 

    public double Simmiraty(String a, String b){ 
     return wordVectors.similarity(a,b); 
    } 

    public static void main(){ 
     Load load = GetLoad(); 
    } 

} 

public class B{ 

    public void function(){ 
     Load load = Load.GetLoad(); 
    } 

} 
+0

しかし、私は手動でそれを停止するまでクラスを実行したい。実行中、それは要求を実行し、結果を返します。私は同様のことを試みたが、私はAに任意のパラメータを送信できませんでした。ファイルのロード後、Aの実行が停止します。 –

+0

@ AboodAl-mars別のJavaアプリケーションから2つのクラスを通信しようとしていますか? –

+0

次に[プロセス間通信](http://stackoverflow.com/questions/10942427/how-to-have-2-jvms-talk-to-one-another)を調べるとよいでしょう。私は[何か似たような]を作っていた(http://stackoverflow.com/questions/39804975/java-how-can-i-create-an-application-that-will-only-start-if-an-instance-of-それはしばらく前、私はそれがあなたを助けると思う。 –

関連する問題