У меня есть пункт контекстного меню со следующим кодом:
MenuItem mi1=new MenuItem("to hand");
mi1.setOnAction(e->{
list.remove(card);
arena.getHand().addCard(card);
updateSlots();
shuffle();
});
метод shuffle создает новый поток и запускает большую часть кода в этом новом потоке; другие функции (addCard и updateSlots) выполняются в основном потоке;
из этого кода я ожидаю, что функция shuffle будет запускаться только после завершения функции updateSlots;
но, похоже, это не так; если я ничего не упустил, метод shuffle вызывается еще до того, к а к < e m > u p d a t e S l o t s < / e m > з а в е р ш и т с я ; < b r / > к а к т а к о е м о ж е т б ы т ь ? я ч т о - т о у п у с т и л ? < / p > < b r / > о б н о в л е н и е : < / p > < b r / > < c o d e > p u b l i c v o i d u p d a t e S l o t s ( ) { < b r / > f o r ( i n t i = 0 ; i & l t ; l i s t . s i z e ( ) ; i + + ) { < b r / > C a r d c a r d = l i s t . g e t ( i ) ; < b r / > S h a p e s h = s l o t s [ i ] ; < b r / > s h . s e t F i l l ( c a r d . g e t C o l o r ( ) ) ; < b r / > < b r / > M e n u I t e m m i 1 = n e w M e n u I t e m ( & q u o t ; t o h a n d & q u o t ; ) ; < b r / > m i 1 . s e t O n A c t i o n ( e - & g t ; { < b r / > l i s t . r e m o v e ( c a r d ) ; < b r / > a r e n a . g e t H a n d ( ) . a d d C a r d ( c a r d ) ; < b r / > u p d a t e S l o t s ( ) ; < b r / > s h u f f l e ( ) ; < b r / > } ) ; < b r / > < b r / > M e n u I t e m m i 2 = n e w M e n u I t e m ( & q u o t ; s u m m o n i n a t k & q u o t ; ) ; < b r / > m i 2 . s e t O n A c t i o n ( e - & g t ; { < b r / > c a r d . s e t P o s i t i o n ( & q u o t ; a t k & q u o t ; ) ; < b r / > c a r d . s e t F a c e ( & q u o t ; u p & q u o t ; ) ; < b r / > a r e n a . g e t M o n s t e r Z o n e ( ) . a d d C a r d ( c a r d ) ; < b r / > } ) ; < b r / > < b r / > M e n u I t e m m i 3 = n e w M e n u I t e m ( & q u o t ; s u m m o n i n d e f & q u o t ; ) ; < b r / > m i 3 . s e t O n A c t i o n ( e - & g t ; { < b r / > c a r d . s e t P o s i t i o n ( & q u o t ; d e f & q u o t ; ) ; < b r / > c a r d . s e t F a c e ( & q u o t ; u p & q u o t ; ) ; < b r / > a r e n a . g e t M o n s t e r Z o n e ( ) . a d d C a r d ( c a r d ) ; < b r / > });
MenuItem mi4=new MenuItem("to backrow");
mi4.setOnAction(e->{
card.setFace("up");
arena.getBackrowZone().addCard(card);
});
MenuItem mi5=new MenuItem("to graveyard");
mi5.setOnAction(e->{
list.remove(card);
updateSlots();
arena.getGraveyard().addCard(card);
});
MenuItem mi6=new MenuItem("remove");
mi6.setOnAction(e->{
list.remove(card);
updateSlots();
arena.getRemovedZone().addCard(card);
});
ContextMenu cm=new ContextMenu(mi1,mi2,mi3,mi4,mi5,mi6);
sh.setOnMouseClicked(e->{
cm.show(sh,e.getScreenX(),e.getScreenY());
});
}
for(int i=list.size();i
Подробнее здесь: https://stackoverflow.com/questions/788 ... quentially
Может ли Java-код выполняться непоследовательно? [закрыто] ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1722877786
Anonymous
У меня есть пункт контекстного меню со следующим кодом:
MenuItem mi1=new MenuItem("to hand");
mi1.setOnAction(e->{
list.remove(card);
arena.getHand().addCard(card);
updateSlots();
shuffle();
});
метод shuffle создает новый поток и запускает большую часть кода в этом новом потоке; другие функции (addCard и updateSlots) выполняются в основном потоке;
из этого кода я ожидаю, что функция shuffle будет запускаться только после завершения функции updateSlots;
но, похоже, это не так; если я ничего не упустил, метод shuffle вызывается еще до того, к а к < e m > u p d a t e S l o t s < / e m > з а в е р ш и т с я ; < b r / > к а к т а к о е м о ж е т б ы т ь ? я ч т о - т о у п у с т и л ? < / p > < b r / > о б н о в л е н и е : < / p > < b r / > < c o d e > p u b l i c v o i d u p d a t e S l o t s ( ) { < b r / > f o r ( i n t i = 0 ; i & l t ; l i s t . s i z e ( ) ; i + + ) { < b r / > C a r d c a r d = l i s t . g e t ( i ) ; < b r / > S h a p e s h = s l o t s [ i ] ; < b r / > s h . s e t F i l l ( c a r d . g e t C o l o r ( ) ) ; < b r / > < b r / > M e n u I t e m m i 1 = n e w M e n u I t e m ( & q u o t ; t o h a n d & q u o t ; ) ; < b r / > m i 1 . s e t O n A c t i o n ( e - & g t ; { < b r / > l i s t . r e m o v e ( c a r d ) ; < b r / > a r e n a . g e t H a n d ( ) . a d d C a r d ( c a r d ) ; < b r / > u p d a t e S l o t s ( ) ; < b r / > s h u f f l e ( ) ; < b r / > } ) ; < b r / > < b r / > M e n u I t e m m i 2 = n e w M e n u I t e m ( & q u o t ; s u m m o n i n a t k & q u o t ; ) ; < b r / > m i 2 . s e t O n A c t i o n ( e - & g t ; { < b r / > c a r d . s e t P o s i t i o n ( & q u o t ; a t k & q u o t ; ) ; < b r / > c a r d . s e t F a c e ( & q u o t ; u p & q u o t ; ) ; < b r / > a r e n a . g e t M o n s t e r Z o n e ( ) . a d d C a r d ( c a r d ) ; < b r / > } ) ; < b r / > < b r / > M e n u I t e m m i 3 = n e w M e n u I t e m ( & q u o t ; s u m m o n i n d e f & q u o t ; ) ; < b r / > m i 3 . s e t O n A c t i o n ( e - & g t ; { < b r / > c a r d . s e t P o s i t i o n ( & q u o t ; d e f & q u o t ; ) ; < b r / > c a r d . s e t F a c e ( & q u o t ; u p & q u o t ; ) ; < b r / > a r e n a . g e t M o n s t e r Z o n e ( ) . a d d C a r d ( c a r d ) ; < b r / > });
MenuItem mi4=new MenuItem("to backrow");
mi4.setOnAction(e->{
card.setFace("up");
arena.getBackrowZone().addCard(card);
});
MenuItem mi5=new MenuItem("to graveyard");
mi5.setOnAction(e->{
list.remove(card);
updateSlots();
arena.getGraveyard().addCard(card);
});
MenuItem mi6=new MenuItem("remove");
mi6.setOnAction(e->{
list.remove(card);
updateSlots();
arena.getRemovedZone().addCard(card);
});
ContextMenu cm=new ContextMenu(mi1,mi2,mi3,mi4,mi5,mi6);
sh.setOnMouseClicked(e->{
cm.show(sh,e.getScreenX(),e.getScreenY());
});
}
for(int i=list.size();i
Подробнее здесь: [url]https://stackoverflow.com/questions/78835077/can-java-code-be-executed-non-sequentially[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия