Как выявить окно?

Примечание: Неинициализированное смещение строки: *

Как видно из названия, возникает такой тип ошибки, когда вы, скорее всего, пытаетесь перебрать или найти значение из массива с не- существующий ключ.

Считаем, что вы пытаетесь показать каждую букву из $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, он выдает ошибку смещения.

Аналогичные ошибки:

90
задан Nathan 27 July 2018 в 21:52
поделиться

4 ответа

Возможное решение:

java.awt.EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
        myFrame.toFront();
        myFrame.repaint();
    }
});
70
ответ дан sth 24 November 2019 в 07:04
поделиться

У меня была та же проблема с обеспечением 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.

33
ответ дан River 24 November 2019 в 07:04
поделиться

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, этот код, кажется, хорошо работает.

22
ответ дан Matthieu 24 November 2019 в 07:04
поделиться

Существуют многочисленный протесты в javadoc для toFront () метод, который может вызывать Вашу проблему.

, Но я возьму предположение так или иначе, когда "только вкладка во вспышках панели задач", приложение будет минимизировано? Раз так следующая строка от javadoc может применяться:

, "Если это Окно видимо, выявляет это Окно и может сделать его сфокусированным Окном".

0
ответ дан Brendan Cashman 24 November 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: