Inline::Java внутри Perl Threads: неизвестная ссылка на объект Java)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Inline::Java внутри Perl Threads: неизвестная ссылка на объект Java)

Сообщение Anonymous »

Я пытаюсь запустить Java-код внутри Perl, используя Inline::Java
Все работает очень хорошо, но не тогда, когда у меня есть Theads.
x.pl

Код: Выделить всё

use strict;
use warnings;
use lib ".";
use MyP;

use Inline Java => bar (4);   # ok
my $myp = MyP->new ($myx);
print "\n3) " . $myp->x1 ();     # ok
print "\n4) " . $myp->x2 ();     # ok

$myp->start ();                  # NOK
for (;;)
{
sleep (1);
}
print "\n";
MyP.pm

Код: Выделить всё

package MyP;

use threads;
use threads::shared;
use strict;
use warnings;

sub new
{
my $class = shift;
my $self = {};

$self->{myx} = shift;
bless ($self, $class);
return $self;
}

sub x1
{
my $self = shift;
return MyX->foo (6);
}

sub x2
{
my $self = shift;
return $self->{myx}->bar (7);
}

sub start
{
my $self = shift;
threads->create (\&run, $self);
}

sub run
{
my $self = shift;
print "\nT1) " . MyX->foo (10);          # static
print "\nT2) " . $self->{myx}->bar (20); # by instance
}
1;
Вывод

Код: Выделить всё

1) 4
2) 8
3) 7
4) 14
Thread 1 terminated abnormally: Unknown Java object reference main::MyX=HASH(0x55dd5252bee8) at MyP.pm line 45 thread 1.
at MyP.pm line 45 thread 1.
Как мы видим, прямой вызов — это нормально, вызов внутри пакета/класса также работает. Но если я вызываю его внутри потока, возникает какая-то проблема.
Я пробую это с помощью переданного экземпляра или статического способа.

Подробнее здесь: https://stackoverflow.com/questions/781 ... -reference
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»