Объяснение
В первом сценарии , когда вы используете
Task task = new Task<Void>() {
@Override
protected Void call() throws Exception {
initStubGamepad();
return null;
}
}
Внутри initStubGamepad()
, который запущен на задаче, вы пытаются обновить компоненты пользовательского интерфейса внутри методов pressBtn()
и releaseBtn()
, поэтому вы сталкиваетесь с
java.lang.IllegalStateException: Not on FX application thread
, поскольку все обновления пользовательского интерфейса должны встречаться в потоке JavaFX
В втором сценарии , когда вы используете
Platform.runLater(new Runnable() {
@Override
public void run() {
initStubGamepad();
}
});
, пользовательский интерфейс не появляется, потому что у вас бесконечный цикл внутри initStubGamepad()
, который помещает поток приложений JavaFX в бесконечный цикл
Решение
. К тому времени, как вы сюда доберетесь, вы должны уже найти решение. Если вы этого не сделали, попробуйте поместить обновление компонентов Javafx в поток пользовательского интерфейса. Таким образом, вместо вызова initStubGamepad()
внутри Platform.runLater
попробуйте вызвать внутри него pressBtn()
и releaseBtn()
.
Попробуйте использовать
while (true) {
if (rnd.nextInt(30) == 3) {
Platform.runLater(() -> pressBtn());
} else if (rnd.nextInt(30) == 7) {
Platform.runLater(() -> releaseBtn());
}
}
или вы также можете использовать
public void pressBtn() {
if(!isXPressed) {
Platform.runLater(() -> iv1.setVisible(true));
isXPressed = true;
}
}
Вам нужно изменить форму DataFrame на stack
для Series
, затем преобразовать первый уровень MultiIndex
в строки формата YYYY-MM-DD
и перейти к словарю:
output_file("bars.html")
dates = pd.date_range('20190101', periods=100)
dfr = pd.DataFrame(np.random.randn(100, 6), index=dates, columns=list('ABCDEF'))
s = dfr.resample('M').sum().stack()
s.index = [s.index.get_level_values(0).strftime('%Y-%m-%d'),
s.index.get_level_values(1)]
x = s.index.values
print (x)
[('2019-01-31', 'A') ('2019-01-31', 'B') ('2019-01-31', 'C')
('2019-01-31', 'D') ('2019-01-31', 'E') ('2019-01-31', 'F')
('2019-02-28', 'A') ('2019-02-28', 'B') ('2019-02-28', 'C')
('2019-02-28', 'D') ('2019-02-28', 'E') ('2019-02-28', 'F')
('2019-03-31', 'A') ('2019-03-31', 'B') ('2019-03-31', 'C')
('2019-03-31', 'D') ('2019-03-31', 'E') ('2019-03-31', 'F')
('2019-04-30', 'A') ('2019-04-30', 'B') ('2019-04-30', 'C')
('2019-04-30', 'D') ('2019-04-30', 'E') ('2019-04-30', 'F')]
counts = s.values
print (counts)
[ 5.8759305 -7.52857928 2.74794675 9.91942791 1.49860961 0.16046735
0.15459667 3.86407105 0.79097565 -2.65899131 1.86548175 1.41251127
-3.67053891 13.90439142 2.80744458 2.51583516 -2.37587758 4.49826959
-0.7661524 -6.22533991 5.90391326 4.40654035 1.93598738 2.49407506]
source = ColumnDataSource(data=dict(x=x, counts=counts))
p = figure(x_range=FactorRange(*x), plot_height=250, title="Sums by Months",
toolbar_location=None, tools="")
p.vbar(x='x', top='counts', width=0.9, source=source)
p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xaxis.major_label_orientation = 1
p.xgrid.grid_line_color = None
show(p)