Используя ncurses из Java через JNI, изменение размера окна не вызывает получение до тех пор, пока не будет нажата клавиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Используя ncurses из Java через JNI, изменение размера окна не вызывает получение до тех пор, пока не будет нажата клави

Сообщение Anonymous »


Моя цель — создавать текстовые приложения на языках JVM,
и теперь я пытаюсь использовать ncurses с JNI.

Когда я использую ncurses непосредственно из C, изменение размера терминала вызовет getch() и вернет 410 (KEY_RESIZE).
Но я использую ncurses через JNI, getch() ничего не сделает, пока не нажму любую другую клавишу.
[*]Это ограничение JVM? [*]Какое решение этой ситуации? [*]или мне вообще не следует использовать ncurses через JNI?
Вот полный воспроизводимый код:

public class Main { public static own void init(); public static own int getch(); public static own void printw (String string); public static own void endwin(); public static void main(String[] args) { System.loadLibrary("jcurses"); в этом(); for (int key; (key = getch()) != 'q';) printw("%d\n".formatted(ключ)); эндвин(); } } #include #include "Main.h" JNIEXPORT void JNICALL Java_Main_init(JNIEnv *env, jclass clazz) { иницкр(); клавиатура (stdscr, TRUE); ноэхо(); } JNIEXPORT jint JNICALL Java_Main_getch(JNIEnv *env, jclass clazz) { возврат (длинный) getch(); } JNIEXPORT void JNICALL Java_Main_printw(JNIEnv *env, jclass clazz, jstring javaString) { const char *nativeString = (*env)->GetStringUTFChars(env, javaString, 0); printw("%s",nativeString); (*env)->ReleaseStringUTFChars(env, javaString,nativeString); } JNIEXPORT void JNICALL Java_Main_endwin(JNIEnv *env, jclass clazz) { эндвин(); } все: javac -h. Main.java gcc -I"$$JAVA_HOME/include" -I"$$JAVA_HOME/include/linux" jcurses.c -shared -o libjcurses.so -lncurses бегать: java -Djava.library.path=. Основной Для сравнения, вот чистый код C, делающий то же самое.
Изменение размера окна немедленно отобразит 410, но не может сделать то же самое с JNI.

#include интервал основной() { иницкр(); клавиатура (stdscr, TRUE); ноэхо(); for (int key; (key = getch()) != 'q';) printw("%d\n", ключ); эндвин(); вернуть 0; } Проверено на устройствах ниже:
[*]x86 ubuntu22.04, ssh из Windows 7 git bash [*]arm64 ubuntu22.04, собственный терминал gnome
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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