2014-07-14 81 views
0

Java代理必須在後臺上傳文件並返回上傳文件的Url。在上傳時,代理必須報告其進展情況。Java代理多線程

我標誌着劑是「在後臺客戶端線程運行

我被困在下面的兩難境地:

  • 我可以運行從Lotus腳本代理和傳遞一個在其參數 - 內存文件,但客戶端實際上並沒有在自己的線程中運行,而是阻塞了整個客戶端。
  • 我可以從公式運行代理,但是不能傳遞任何參數!
  • 如果我使用Lotus Script並處理線程我自己在Java中,我的線程甚至沒有開始!

我讀過Notes client doesn't support multithreading。但是我無法創建代理RunOnServer,因爲它正在訪問僅適用於客戶端的Web服務器。順便說一下,這與another question of mine有關。

有沒有更好的解決方案呢?

+0

我將不勝感激任何解釋向下的一票! – AHH

回答

1

如果您不能代理RunOnServer那麼您可以使用LS2J代替代理。使用線程創建自己的類並使用其屬性。
這裏是例如自定義Java ClassJava Timer

import java.util.Timer; 
import java.util.TimerTask; 

public class Test 
{ 
    private boolean _isOver; 
    private int _counter; 
    private Timer _timer; 
    private String _url; 

    public Test() 
    { 
     _timer = new Timer("Timer"); 
    } 

    public void Start() //Add parameters here that you want to use in Java 
    { 
     _counter = 0; 
     _isOver = false; 
     _url = ""; 

     TimerTask timerTask = new TimerTask() 
     { 
      public void run() 
      { 
       if (_counter++ == 9) 
       { 
        _isOver = true; 

        _timer.cancel(); 

        _url = "http://stackoverflow.com/"; 
       } 
      } 
     }; 

     _timer.scheduleAtFixedRate(timerTask, 30, 5000); 
    } 

    public int getCounter() { return _counter; } 
    public boolean getIsOver() { return _isOver; } 
    public String getURL() { return _url; } 
} 

LotusScript添加全局LS2J變量:

(Options) 
Uselsx "*javacon" 
Use "MyJavaLibrary" 

(Declarations) 
Dim jSession As JavaSession 
Dim jClass As JavaClass 
Dim jObject As JavaObject 

Sub Initialize 

    Set jSession = New JavaSession() 
    Set jClass = jSession.GetClass("MyClass") 
    Set jObject = jClass.CreateObject 

End Sub 

要啓動Java object使用(在ButtonLotusScript):

Call jObject.Start() 'Call with parameters that you want to use in Java 

要檢查狀態,並取得進展的使用(以TimerLotusScript):

If jObject.getIsOver() Then 
    s$ = jObject.getURL() 
    'Show results 
Else   
    i% = jObject.getCounter() 
    'Show progress 
End If