Читать переменные Java - PullRequest
       17

Читать переменные Java

0 голосов
/ 10 мая 2009

Я пытаюсь добиться чтения переменных из апплета Java вне процесса из моей программы на C #. Помимо чтения адресов памяти, есть ли способ получить значения переменных из Java-апплета? Этот Java-апплет будет работать внутри браузера. Если это невозможно сделать из C #, возможно ли сделать это из другого Java-апплета?

Спасибо.

Ответы [ 6 ]

2 голосов
/ 10 мая 2009

Да, это можно сделать.

Форма C # может содержать компонент веб-браузера, запускать JScript и вызывать публичные методы апплета Java.

Некоторое время назад я создал простую веб-страницу, на которой размещен апплет, который рисует карту «горячего» цвета. Ввод осуществляется с помощью JScript, и МОЖЕТ быть получен с помощью AJAX или любого другого приложения, которое может запускать JScript в HTML DOM.

Источник HTML:

<HTML><HEAD></HEAD><BODY> 
<SCRIPT> 
function call() {
    var inputData = "-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,0,1647,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,89,0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,0,0,615,366,0,1198,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,0,2179,1262,764,200,0,0,609,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,0,0,3401,1940,0,210,0,-1,-1,162,0,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,0,-1,966,0,86,0,0,0,0,-1,-1,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,-1,250,53,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-1,1977,1413,128,0,0,0,0,0,0,-1,1413,2447,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,0,-1,0,0,0,0,0,0,0,-1,317,0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,0,0,0,0,0,0,0,0,0,0,3246,2190,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,51,0,-1,0,0,0,-1,0,-1,0,-1,-1,1523,-2,-2,-2,-1,0,0,-2,-2,0,0,-2,-2,-2,-2,-2"
        + ";-2,0,0,0,0,0,0,0,0,0,0,1692,2028,2850,-2,0,-1,0,0,0,0,0,0,0,-1,-2,-2,-2,-2"
        + ";-2,0,0,0,0,0,-1,0,0,0,-1,1292,-2,-2,-2,0,0,-1,-1,0,0,0,0,0,-1,0,-2,-2,-2"
        + ";-2,0,-1,0,0,-1,0,0,-1,0,1028,1247,7675,9244,7940,0,-1,0,0,-1,0,0,0,0,0,0,0,-2,-2"
        + ";-2,-1,0,0,0,0,0,0,0,0,844,1114,2860,6631,4249,0,0,-1,-1,0,0,0,0,0,0,0,0,-2,-2"
        + ";-2,-2,0,0,0,-1,0,-1,0,0,0,-1,1958,2379,-1,0,0,0,0,0,0,0,0,-1,0,0,0,-2,-2"
        + ";-2,-2,-2,0,470,0,-2,-2,-2,0,0,0,-1,0,0,0,0,0,-1,0,-1,0,0,3574,2706,2195,-1,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,-1,-1,0,0,0,0,0,0,0,0,165,-1,-1,1282,867,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,-1,0,0,0,0,34,504,3098,2708,2324,-1,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,-1,0,0,0,0,0,0,0,0,0,721,-1,3854,2783,-1,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,-1,0,0,0,-1,0,34,191,2455,4126,0,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,0,3982,2656,0,0,-1,0,0,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,-1,0,0,2194,0,0,0,0,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,-1,0,0,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2";
    document.Necrodrip.update(inputData);
}
</SCRIPT> 
<FORM> 
<APPLET CODE="kuningriik.pdApplet.class"  
        NAME="Necrodrip" 
        width="1200" height="600"> 
</APPLET><br/> 
<INPUT type="button" value="Loo kaart" 
   onClick = "call()"> 
</FORM> 
</BODY></HTML> 

Вы можете просмотреть страницу здесь: ссылка

1 голос
/ 10 мая 2009

Если вы можете изменить код апплета, вы можете разместить на нем сервер RMI, который является предметом этого упражнения . Я не эксперт в этом вопросе - я предполагаю, что это может быть предметом различных ограничений безопасности.

Если вы не можете изменить апплет, но вы можете изменить HTML-страницу, показывающую апплет, есть два способа доступа к информации из апплета.

Первый способ - это сценарий апплета с использованием Javascript, как подсказывает @Margus (все открытые методы объекта апплета предоставляются через объект DOM апплета).

Другой способ - разместить собственный апплет на странице и использовать getAppletContext(), чтобы получить ссылку на другой апплет. Основным преимуществом такой работы является то, что вы можете получить доступ к непубличной информации из стороннего апплета через отражение и опубликовать ее на сервере RMI (как указано выше).

0 голосов
/ 10 мая 2009

Это то, что отладчик делает все время, так что ясно, что это возможно. В последних версиях Sun Java вы присоединяете JVM Tool Interface (JVMTI) относительно легко после запуска процесса. Однако это не обязательно очень просто.

Если вы контролируете источник апплета (или даже если нет), возможно, легче обмениваться данными по сетевому соединению.

0 голосов
/ 10 мая 2009

Вы можете получить доступ к информации из запущенного процесса Java (в том числе в браузере), если у вас установлен JDK и вы используете более позднюю JVM. Взгляните на эти инструменты JDK .

0 голосов
/ 10 мая 2009

Это вообще невозможно.

Процессы по определению не разделяют память или любой другой ресурс по этому вопросу. Это то, что применяется на уровне ОС, и вы ничего не можете с этим поделать.

Если бы это было возможно, вы могли бы только представить, какой могла бы быть проблема безопасности / стабильности.

Если вам действительно нужно межпроцессное взаимодействие, проверьте программирование сокетов на вашем языке. Обратите внимание, что для этого потребуются изменения как клиента (вашего Java-апплета), так и сервера (процесс C #).

0 голосов
/ 10 мая 2009

Нет. То, что вы пытаетесь сделать, невозможно из Java-апплета или из любого другого языка, процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...