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

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#1
Блин, после замены клипбордовых процедур с апишных на джаву на некоторых машинах (там кстати 8.5 стоит) нотес стал крошиться с ошибкой
LS2J Error: Java Virtual Machine failed to start
Куда смотреть?
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#3
lmike сказал(а):
Взят вот этот 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">
Код:
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
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
2
34
Kiev, Ukraine
#4
Omh, а не пробовал все это сделать в виде метода java-класса в java-библиотеке и вызвыть единым разом, а не дергать все методы через враппер?..
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#5
Пока не пробовал.
У меня первочередая задача была переписать сущ. API ф-ии на джаву.
Поэтому такой путь выбрал, бы в отстальных местах не менять вызовов.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#6
ну воще-то 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 пользует нити...
в агентах (скорее всего) работать не будет ибо наткнется на треды агента (где-то пробегало такое)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#7
чё-то топикстартер не отписывается :( - удалось ли реализовать буфер др. способом
интересно ведь
 

Omh

Well-Known Member
Lotus team
04.07.2007
2 210
1
37
Латвиджа, Рига
#8
Топикстартер дошёл до того, что показывает модальный попап из агента и потом, при заходе в этот агент из дизайнера, notes крошится (это под 702) :(
Буфер я пока откатил назад на апишный, ибо у камрада с 8.5 перестало работать, а времени эксперементировать пока особо не было.
Потихоньку читаю литературу, ибо, как я понял, быка за йайца с места взять не очень просто.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 435
351
homepage.mac.com
#9
про агентов и "родные" треды на джава - я упомянул - не будет работать...
треды в агенте д.б. Нотусёвые
для эксперимента - пробуйте написать код в агенте (влоб без библиотек) с открытием джавовских тредов...
надо класс не Thread использовать, а NotesThread
 
#11
<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]
на кнопку вешаем код:
Код:
'[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 - полет нормальный