*
Как видно из названия, возникает такой тип ошибки, когда вы, скорее всего, пытаетесь перебрать или найти значение из массива с не- существующий ключ.
Считаем, что вы пытаетесь показать каждую букву из $string
$string = 'ABCD';
for ($i=0, $len = strlen($string); $i <= $len; $i++){
echo "$string[$i] \n";
}
. Вышеприведенный пример сгенерирует ( онлайн-демонстрацию ):
A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X
И, как только скрипт заканчивается эхом D
, вы получите ошибку, потому что внутри цикла for()
вы сказали PHP, чтобы показать вам от первого до пятого символа строки из 'ABCD'
Что, существует, но поскольку цикл начинает отсчитываться от 0
и эха D
к моменту достижения значения 4
, он выдает ошибку смещения.
Аналогичные ошибки:
Возможное решение:
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
myFrame.toFront();
myFrame.repaint();
}
});
У меня была та же проблема с обеспечением JFrame
к передней стороне под Ubuntu (Java 1.6.0_10). И единственный способ, которым я мог разрешить его, путем обеспечения WindowListener
. А именно, я должен был установить мой JFrame
, чтобы всегда остаться на вершине каждый раз, когда toFront()
вызывается, и обеспечьте windowDeactivated
обработчик событий к setAlwaysOnTop(false)
.
Так, вот код, который мог быть помещен в основу JFrame
, который используется для получения всех фреймов приложения.
@Override
public void setVisible(final boolean visible) {
// make sure that frame is marked as not disposed if it is asked to be visible
if (visible) {
setDisposed(false);
}
// let's handle visibility...
if (!visible || !isVisible()) { // have to check this condition simply because super.setVisible(true) invokes toFront if frame was already visible
super.setVisible(visible);
}
// ...and bring frame to the front.. in a strange and weird way
if (visible) {
toFront();
}
}
@Override
public void toFront() {
super.setVisible(true);
int state = super.getExtendedState();
state &= ~JFrame.ICONIFIED;
super.setExtendedState(state);
super.setAlwaysOnTop(true);
super.toFront();
super.requestFocus();
super.setAlwaysOnTop(false);
}
Каждый раз, когда Ваш кадр должен быть отображен или перенес вызов на передний план frame.setVisible(true)
.
, Так как я переместился в Ubuntu 9.04, кажется, нет никакой потребности в наличии WindowListener
для вызова super.setAlwaysOnTop(false)
- как может наблюдаться; этот код был перемещен в методы toFront()
и setVisible()
.
Обратите внимание на то, что метод setVisible()
должен всегда вызываться на EDT.
Windows имеет средство, чтобы препятствовать тому, чтобы окна крали фокус; вместо этого это высвечивает значок панели задач. В XP это идет по умолчанию (единственное место, которое я видел для изменения, это использует TweakUI, но существует реестр, устанавливающий где-нибудь). В Vista они, возможно, изменили значение по умолчанию и/или представили его как пользователь доступная установка с out-of-the-box UI.
Препятствующие окна вынудить себя к передней стороне и взять фокус являются функцией начиная с Windows 2K (и я, со своей стороны, благодарен за него).
Однако у меня есть немного приложения Java, которое я использую, чтобы напомнить мне записывать свои операции при работе, и оно делает себя активным окном каждые 30 минут (настраивающийся, конечно). Это всегда последовательно работает под Windows XP и никогда не высвечивает окно строки заголовка. Это использует следующий код, названный в потоке UI в результате увольнения события таймера:
if(getState()!=Frame.NORMAL) { setState(Frame.NORMAL); }
toFront();
repaint();
(первая строка восстанавливает, если бы минимизировано... на самом деле, она восстановила бы его, если максимизируется также, но у меня никогда нет ее так).
, В то время как мне обычно минимизировали это приложение, довольно часто это находится просто позади моего текстового редактора. И, как я сказал, это всегда работает.
у меня действительно есть идея о том, чем могла быть Ваша проблема - возможно, у Вас есть состояние состязания с setVisible () вызов. toFront () не может быть допустимым, если окно на самом деле не отображено, когда это называют; у меня была эта проблема с requestFocus () прежде. Вы, возможно, должны поместить toFront (), вызов в слушателе UI на окне активировал событие.
07.09.2014: В какой-то момент во время вышеупомянутый код прекратил работать, возможно, в Java 6 или 7. После некоторого расследования и экспериментирования я должен был обновить код для переопределения метода окна toFront
, делают это (в сочетании с измененным кодом от того, что выше):
setVisible(true);
toFront();
requestFocus();
repaint();
...
public @Override void toFront() {
int sta = super.getExtendedState() & ~JFrame.ICONIFIED & JFrame.NORMAL;
super.setExtendedState(sta);
super.setAlwaysOnTop(true);
super.toFront();
super.requestFocus();
super.setAlwaysOnTop(false);
}
С Java 8_20, этот код, кажется, хорошо работает.
Существуют многочисленный протесты в javadoc для toFront () метод, который может вызывать Вашу проблему.
, Но я возьму предположение так или иначе, когда "только вкладка во вспышках панели задач", приложение будет минимизировано? Раз так следующая строка от javadoc может применяться:
, "Если это Окно видимо, выявляет это Окно и может сделать его сфокусированным Окном".