Копирование текста в буфер обмена

Тема в разделе "Lotus + Java + LS2J", создана пользователем Omh, 1 апр 2009.

  1. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Блин, после замены клипбордовых процедур с апишных на джаву на некоторых машинах (там кстати 8.5 стоит) нотес стал крошиться с ошибкой
    LS2J Error: Java Virtual Machine failed to start
    Куда смотреть?
     
  2. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    тю... я-то думал, что восьмерка будет запускать java-код в своем потоке...
     
  3. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Взят вот этот java класс с nsftools и написал небольшой
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">враппер в виде LS библиотеки</div></div><div class="sp-body"><div class="sp-content">
    Код (LotusScript):
    Option Public
    Option Declare
    Uselsx "*javacon"
    Use "ErrorHandlerLib"
    Use "ClipboardJava" 'би-ка с Java классом.

    Function GetClipboardText() As String
    On Error Goto Errh

    Dim rv As String

    Dim JSession As JAVASESSION
    Set JSession = New JAVASESSION

    Dim JClipboardClass As JAVACLASS
    Set JClipboardClass = JSession.GetClass("ClipHelper")

    Dim JClipboardObject As JavaObject
    Set JClipboardObject = JClipboardClass.CreateObject

    rv = JClipboardObject.pasteString()

    GetClipboardText = rv

    Exit Function
    Errh:
    Call ErrHandler
    Exit Function
    End Function

    Function SetClipboardText(Data As String) As Boolean
    On Error Goto Errh

    Dim rv As Boolean

    Dim JSession As JAVASESSION
    Set JSession = New JAVASESSION

    Dim JClipboardClass As JAVACLASS
    Set JClipboardClass = JSession.GetClass("ClipHelper")

    Dim JClipboardObject As JavaObject
    Set JClipboardObject = JClipboardClass.CreateObject

    rv = JClipboardObject.copyString(Data)

    SetClipboardText = rv

    Exit Function
    Errh:
    Call ErrHandler
    Exit Function
    End Function
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Omh, а не пробовал все это сделать в виде метода java-класса в java-библиотеке и вызвыть единым разом, а не дергать все методы через враппер?..
     
  5. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Пока не пробовал.
    У меня первочередая задача была переписать сущ. API ф-ии на джаву.
    Поэтому такой путь выбрал, бы в отстальных местах не менять вызовов.
     
  6. lmike

    lmike нет, пердело совершенство
    Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    ну воще-то SWT, Swing, AWT контролы и методы плозосовместимы в "одной упаковке"
    надо либо/либо...
    в случае с восмеркой - надо код под СВТ (таково моё мнение)
    потому как вся оболочка на неё завязана
    вот "развал" великов:
    http://www.java2s.com/Tutorial/Java/0280__...og0280__SWT.htm
    клипборда я там не заметил, но, полагаю, найти не сложно (в др. местах) будет

    ЗЫ: AWT очень старая библиотека (еще со времен 1.1 джавы) и пользовать её можно - но при совмещении можно граблей огрести...
    тем паче - необходимости нет уже давно (R5 не поддерживается)

    ЗЗЫ: протер глаза и нашел :) http://www.java2s.com/Tutorial/Java/0280__...__Clipboard.htm

    тут еще заметил - код под AWT пользует нити...
    в агентах (скорее всего) работать не будет ибо наткнется на треды агента (где-то пробегало такое)
     
  7. lmike

    lmike нет, пердело совершенство
    Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    чё-то топикстартер не отписывается :( - удалось ли реализовать буфер др. способом
    интересно ведь
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Топикстартер дошёл до того, что показывает модальный попап из агента и потом, при заходе в этот агент из дизайнера, notes крошится (это под 702) :(
    Буфер я пока откатил назад на апишный, ибо у камрада с 8.5 перестало работать, а времени эксперементировать пока особо не было.
    Потихоньку читаю литературу, ибо, как я понял, быка за йайца с места взять не очень просто.
     
  9. lmike

    lmike нет, пердело совершенство
    Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    про агентов и "родные" треды на джава - я упомянул - не будет работать...
    треды в агенте д.б. Нотусёвые
    для эксперимента - пробуйте написать код в агенте (влоб без библиотек) с открытием джавовских тредов...
    надо класс не Thread использовать, а NotesThread
     
  10. lmike

    lmike нет, пердело совершенство
    Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  11. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">многабукв</div></div><div class="sp-body"><div class="sp-content">создаем java библиотеку с именем "TextTransfer " и содержанием:
    <!--shcode--><pre><code class='java'>//(с) http://www.javapractices.com/topic/TopicAction.do?Id=82
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.ClipboardOwner;
    import java.awt.datatransfer.Transferable;
    import java.awt.datatransfer.StringSelection;
    import java.awt.datatransfer.DataFlavor;
    import java.awt.datatransfer.UnsupportedFlavorException;
    import java.awt.Toolkit;
    import java.io.*;

    public final class TextTransfer implements ClipboardOwner {

    public static void main (String [] aArguments ){
    TextTransfer textTransfer = new TextTransfer();

    //display what is currently on the clipboard
    System.out.println("Clipboard contains:" + textTransfer.getClipboardContents() );

    //change the contents and then re-display
    textTransfer.setClipboardContents("blah, blah, blah");
    System.out.println("Clipboard contains:" + textTransfer.getClipboardContents() );
    }

    /**
    * Empty implementation of the ClipboardOwner interface.
    */
    public void lostOwnership( Clipboard aClipboard, Transferable aContents) {
    //do nothing
    }

    /**
    * Place a String on the clipboard, and make this class the
    * owner of the Clipboard's contents.
    */
    public void setClipboardContents( String aString ){
    StringSelection stringSelection = new StringSelection( aString );
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    clipboard.setContents( stringSelection, this );
    }

    /**
    * Get the String residing on the clipboard.
    *
    * @return any text found on the Clipboard; if none found, return an
    * empty String.
    */
    public String getClipboardContents() {
    String result = "";
    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
    //odd: the Object param of getContents is not currently used
    Transferable contents = clipboard.getContents(null);
    boolean hasTransferableText =
    (contents != null) &&
    contents.isDataFlavorSupported(DataFlavor.stringFlavor)
    ;
    if ( hasTransferableText ) {
    try {
    result = (String)contents.getTransferData(DataFlavor.stringFlavor);
    }
    catch (UnsupportedFlavorException ex){
    //highly unlikely since we are using a standard DataFlavor
    System.out.println(ex);
    ex.printStackTrace();
    }
    catch (IOException ex) {
    System.out.println(ex);
    ex.printStackTrace();
    }
    }
    return result;
    }
    }[/CODE]
    на кнопку вешаем код:
    Код (Text):
    '[options]
    Option Declare
    Uselsx "*javacon"
    Use "TextTransfer"
    '[click]
    Sub Click(Source As Button)
    Dim js As JAVASESSION
    Dim clipboardClass As JAVACLASS
    Dim clipboard As JavaObject

    Set js = New JAVASESSION
    Set clipboardClass = js.GetClass("TextTransfer")
    Set clipboard = clipboardClass.CreateObject
    clipboard.setClipboardContents( "бугага" )
    End Sub
    R7 - полет нормальный
     
  12. lmike

    lmike нет, пердело совершенство
    Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    turumbay
    через срок... +1 адназначна
     
  13. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    спсб. мне самому понравилось, если честно.
    как написал про UI - тут же у подумалось, что должно буть java решение. 5 минут и в дамках :)
     
Загрузка...

Поделиться этой страницей