2014-07-14 48 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