Панель Java не обновляется полностью изредка - PullRequest
4 голосов
/ 20 сентября 2011

ОБНОВЛЕНИЕ - 21.09.2011

Я сделал начальный краткий обзор кода и везде, где он выглядит, как будто он обновляет пользовательский интерфейс, он делает это через:

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        // code goes here
    }
});

Основные обновления пользовательского интерфейса происходят в одном месте, которое сначала выполняет описанную выше оболочку, а затем просит текущую видимую панель обновить себя в этом потоке, поэтому должно находиться в EDT.Если я правильно понимаю?

Тем не менее, могут быть странные места, которые я пропустил.В настоящее время я работаю с некоторыми кодами AspectJ, которые я нашел здесь:

http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html

, чтобы увидеть, будет ли это выделять какие-то странные места, где он не работает правильно.

Кроме этого, есть еще какие-нибудь мысли?

Re: предположения о прозрачности - как это проявится?Что я ищу?Хотя я проделал большую работу по улучшению кода, он в значительной степени унаследован от предыдущих людей, поэтому я не настолько знаком с ним, как это может быть полезно:)

Re: вставка фрагментов кода - I 'Я бы хотел, но, не сужая проблему, я не могу придумать разумный ограниченный фрагмент для публикации, я, к сожалению, буквально понятия не имею, где проблема может заключаться в коде.

Спасибо за все ответы, таким образомдалеко.

ОРИГИНАЛЬНЫЙ ВОПРОС

У нас есть приложение, которое размещено внутри сторонней системы.Нашей частью является JPanel, который возвращается, и хост-приложение (Lagan CRM) затем встраивает эту Panel в свое приложение.

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

На скриншотах ниже, наш JPanel находится справа внизу, верхний левый от него по существукнопка «INFO».

Вот несколько скриншотов, демонстрирующих проблему:

В этом примере проблема видна в области кнопок «Перейти к недоступному» и «Набрать номер».Example 1

В этом примере проблема находится в той же общей области, но это не те же измерения, на самом деле мы не нашли какой-либо общности в отношении области / размерааномалии.Example 2

В этом примере я немного больше общался с пользователем, и похоже, что то, что произошло с пользователем до текущего вызова, показывало кнопку «GO UNAVAILABLE».Затем они начали разговор с вызывающим абонентом, что означает, что система должна начать показывать «ПОДКЛЮЧИТЬ» вверху слева, номер телефона ниже, а справа - кнопку HANGUP.Как вы можете видеть, он обновляется только снаружи, в средней части есть большой блок, который вообще не обновлялся и по-прежнему действует так, как будто они не находятся на вызове.Помимо того, что выглядит уродливо, это вызывает проблемы, потому что есть две или три кнопки, которые должны заменить «GO UNAVAILABLE» одну, и это означает, что функциональность недоступна.Example 3

Я просто хотел показать несколько примеров, чтобы вы могли видеть, что они каждый раз разные блоки, но основная проблема всегда одна и та же.

Некоторые базовые характеристики:

  1. Это происходит только на машинах с XP.

  2. Это происходит только на одном клиентском сайте из примерно 10-15 сайтов, которые его используют, но происходит на всехмашины на этом сайте.

  3. Я спрашивал о том, что окна появляются сверху, но единственное, о котором они знают, прислали мне скриншот, и он не сильно пересекается, конечно, ничто не похоже на эти шаблоны.

  4. Java 1.5 используется на этом сайте, обновление 100+ рабочих станций до 1.6 не является невозможным, но мне нужно иметь разумное указание, что этособираюсь помочь.

  5. У нас есть много других сайтов на 1.5 без этой проблемы.

  6. Мы спросили о том, какое другое программное обеспечение может работать на машинах, и, честно говоря, их очень мало, поскольку они являются рабочими станциями агентов контакт-центра и плотно закреплены.

  7. Панель исправится после того, как абонент повесит трубку, но это означает, что агент фактически теряет этот вызов, поскольку он ничего не может с ним сделать. Для меня это означает, что он по сути блокируется от обновления, а не постоянно блокируется.

  8. Панель реализована в SWING, ничего особенного там нет.

Любые советы, советы, рекомендации, предложения по другим вопросам, на которые я могу получить ответы - или, что еще лучше, решения :) были бы очень благодарны.

1 Ответ

1 голос
/ 27 сентября 2011

Поскольку я не могу увидеть код, этот ответ больше похож на то, что вы могли бы попытаться сделать с информацией, которую я имею:)

  1. Обновление JPanel сложно, если это не сделано из EDT. Даже когда это было сделано из EDT, у меня возникали проблемы при попытке изменить всю структуру JPanel и перерисовать ее. Вместо этого в этих местах я переключился на использование JTabbedpane. Оставьте вкладку и создайте ее заново. Гораздо проще сделать. Я не уверен, поможет ли это в этом случае.
  2. Следующая раскладка. Вы используете какой-либо менеджер макетов? Если у вас есть абсолютно позиционированный материал, то в зависимости от размера и разрешения мониторов все пойдет не так. Я бы порекомендовал использовать макет JGoodies - Forms. Ссылка здесь - http://www.jgoodies.com/freeware/forms/

Извините, я не могу больше помочь .. :(

...