Потоки Java: Это возможно, просматривают/приостанавливают/уничтожают особый поток из другой программы Java, работающей на той же JVM?

Предполагая, что ваш существующий код уже исправен, вы должны:

  • Перейти в верхнем левом углу вашей IDE к дереву проектов
  • Нажмите на лист, который вы хотите контролировать

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

Private Sub sendEmail(ByVal Email_Subject As String, ByVal Email_Send_From As String, _
                      ByVal Email_Send_To As String, ByVal Email_Cc As String, _
                      ByVal Email_Body As String)

    On Error GoTo debugs
    Set Mail_Object = CreateObject("Outlook.Application")
    Set Mail_Single = Mail_Object.CreateItem(0)
    With Mail_Single
        .Subject = Email_Subject
        .To = Email_Send_To
        .CC = Email_Cc
        .BCC = Email_Bcc
        .Body = Email_Body
        .send
    End With

debugs:
   If Err.Description <> "" Then MsgBox Err.Description

End Sub
[ 1121] ... и слушатель события Worksheet_Change, где каждый раз, когда измененная ячейка находится в столбце G, вызывается Sub sendEmail (в этом примере я передаю параметры Offset(0 ( та же строка) , -n) (где n - это количество столбцов до или после G информации, такой как Email_address):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Split(Target.Address, "$")(1) = "G" And Target.Value = "magic words" Then
        sendEmail Target.Offset(0, -1), Target.Offset(0, -2), ...
    End If
End Sub

Просто для справки, например, когда я говорю Target.Offset(0,-2), если Target является (скажем) Range("G4"), то Target.Offset(0,-2) будет Range("E4") (та же строка 0, двумя столбцами перед -2).

7
задан Swanand 8 October 2008 в 07:08
поделиться

4 ответа

К моему знанию не возможно сделать это непосредственно. Что Вы могли рассмотреть, однако должен создать некоторый сервис на Ваше 'нечто', которое можно назвать от 'панели' для уничтожения потока. Существуют, конечно, сотни способов реализовать это. Моя первая мысль состояла бы в том, чтобы сделать это использование RMI.

4
ответ дан 6 December 2019 в 08:46
поделиться

Вы могли сделать это даже без отдельного приложения. Запишите свой собственный класс запуска, который выполняет передачу параметров к исходному классу запуска приложения. Основной метод Вашего класса, хотя создал бы поток, который периодически проверяет список всех потоков (например, Thread.getAllStackTraces или Thread.enumerate), находит незаконный поток и вызывает stop() на нем. Хотя Thread.stop удерживается от использования, это все еще работает.

Другая опция состоит в том, чтобы запустить приложение под отладчиком Java, скажем, jdb и затем приостановите/уничтожьте необходимый поток. Вы могли также добавить параметры к запуску приложения так, чтобы JVM могла быть присоединена, затем присоединить jdb к рабочей JVM и подозревают/уничтожают поток.

3
ответ дан 6 December 2019 в 08:46
поделиться

До сих пор не возможно работать к различным программам в той же JVM, но некоторые люди исследует его, для сокращения времени запуска и памяти и использования CPU различных программ Java, работающих в той же машине

1
ответ дан 6 December 2019 в 08:46
поделиться

На самом деле отладчик java позволит вам убить поток, вставив в него исключение. Я просто пытался понять, как использовать эту функцию, чтобы убить поток без уничтожения всего jvm, когда я столкнулся с этим вопросом. Если вы запустите jvm с такими параметрами командной строки, как:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888 your.app.Main

и подключите отладчик с чем-то вроде:

jdb -attach 127.0.0.1:8888

, вы можете ввести:

threads

, чтобы получить список запущенных потоков, и использовать команду kill, чтобы убить запущенный нить. Бит, в котором я пока не уверен, - это синтаксис этой команды kill, я пробовал очевидное:

kill 0xe2e new java.lang.IllegalArgumentException("er");

и получаю сообщения:

killing thread: Swank REPL Thread
Thread not suspended
Expression must evaluate to an object

("Swank REPL Thread" - это поток, который я хочу убить, и да, я сначала попытался приостановить его;)

Я все еще не могу использовать отладчик java, но мне кажется, что поток может быть убит наугад.

13
ответ дан 6 December 2019 в 08:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: