Не блокирующие ncurses getch () в Java ffm [закрыто]JAVA

Программисты JAVA общаются здесь
Anonymous
Не блокирующие ncurses getch () в Java ffm [закрыто]

Сообщение Anonymous »

У меня есть функция ржавчины с именем init , которая вызывает следующие функции ncurses (в следующем порядке): initscr () , cbreak () , клавиша (stddscr, true) , getch () force indwin () .

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

#[unsafe(no_mangle)]
pub extern "C" fn init() {
unsafe {
_init();
}
}
где _init - функция FFI, объявленная как SO:

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

#[link(...)]
unsafe extern "C" {
pub fn _init();
}
< /code>
Эта функция реализована в C как таковой: < /p>
void _init() {
initscr();
cbreak();
keypad(stdscr, TRUE);
getch();
endwin();
}
< /code>
Эта библиотека ржавчины составлена ​​как динамическая библиотека C (.so) < /p>
Мой код Java выглядит следующим образом: < /p>
public class Init {
public void init() throws RuntimeException {
Linker linker = Linker.nativeLinker();

try(Arena arena = Arena.ofConfined()) {
SymbolLookup lookup = SymbolLookup.libraryLookup(Path.of(...), arena);

Optional optionalInitAddress = lookup.find("init");

if(optionalInitAddress.isPresent()) {
MemorySegment initAddr = optionalInitAddress.get();
FunctionDescriptor initDesc = FunctionDescriptor.ofVoid();
MethodHandle init = linker.downcallHandle(initAddr, initDesc);

init.invoke();
} else {
throw new NoSuchElementException();
}
} catch(Throwable e) {
throw new RuntimeException(e);
}
}
}
Когда я называю эту функцию из Java, используя API FFM, мой терминал просто мерцает, а программа заканчивается, не ожидая getch () . это не исключение времени выполнения или ошибки . Библиотека успешно загружается и работает нормально. < /P>
, глядя на это, я изучил, не ведет ли функцию C, однако при тестировании этой функции я узнал, что функция работает нормально. (В отличие от Java) < /p>

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

void main() {
initscr();
cbreak();
keypad(stdscr, TRUE);
getch();
endwin();
}
Однако, когда аналогичная функция, init вызывается из Java, Java Program мгновенно заканчивает, не ожидая getch () .
Я не уверен, почему Java демонстрирует это странное поведение. Некоторое понимание этого было бы полезно.

Подробнее здесь: https://stackoverflow.com/questions/796 ... n-java-ffm

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