Имам проблеми с показването/функционирането на полета за съобщения и до известна степен диалогови прозорци в Mac (v10.9.5).
Току-що актуализирах JRE и JDK до най-новата версия (8u31). „Java -version“ от терминален прозорец показва, че наистина използвам 8u31. (Преди това използвах 8u20, който показа същото поведение.)
Кодът по-долу работи перфектно в Windows и няколко различни версии на Linux, които тествах, без проблеми. Просто имам проблеми с Mac. Опростих моя код, който е базиран на SWT, но този пример използва Swing, до следното:
package myTest;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class EntryCode
{
public static EntryCode oEntryCode;
public EntryCode()
{
// TODO Auto-generated constructor stub
}
public static void main(String[] args)
{
oEntryCode = new EntryCode();
oEntryCode.open();
}
public void open()
{
JPanel panel = new JPanel();
panel.setMinimumSize(new Dimension(200,200));
JFrame frame = new JFrame("JOptionPane showMessageDialog component example");
System.out.println("open(): entry - With frame");
JOptionPane.showConfirmDialog(frame, "Wow, works on the Mac!", "Inside open()", JOptionPane.YES_NO_OPTION);
System.out.println("Point 1");
System.exit(0);
}
}
Виждам първия изходен ред на системата и кодът виси на заявката за полето за съобщения. В реалния код просто използвам нула като първи аргумент. Оригиналната версия на този тестов код също използваше нула, просто експериментирах с посочването на компонент. Мислех, че това може да е проблемът. Не е.
При показване на SWT диалогови прозорци има тенденция щракването върху бутон да увисне на интерфейса. Зависването е някъде между натискането на бутона и задействането на манипулатора на събития. Манипулаторът на събитие никога не се задейства.
Тук не съм включил диалогов прозорец. Предполагам, че тъй като моето поле за потвърждение/съобщение показва същия проблем, който решава едното, вземете другото безплатно.
Направих търсене в Google за показване на java приложения на Mac, но нищо не се появи.
Мисля, че актуализирането на JRE/JDK до най-новата версия ще реши всички проблеми, свързани с ОС.
Компилирам кода в буркан и използвам следното, за да стартирам от терминален прозорец. Трябва да натисна Ctrl+C, за да затворя приложението.
java -XstartOnFirstThread -jar myTest.jar
мисли?
АКТУАЛИЗАЦИЯ:
Изтрих оригиналната актуализация, но оставям първоначалния въпрос, сега, когато разбирам проблема по-добре.
Истинският проблем е как да стартирате подходящо SWT приложение за ограничения на Mac OSX Cocoa, което използва диалогови прозорци и прозорци за съобщения. (Доколкото ми е известно, единственият начин за показване на кутии за съобщения е да се използва JOptionPane.show*, което е нещо на Swing, като по този начин смесва Swing и SWT.
Интересно е да се отбележи, че проблемът винаги е свързан с бутони, независимо дали е в диалогов прозорец (чисто изпълнение на SWT) или кутии за съобщения. В първото проблемът е увисване, извикващо манипулатора на събития, а второто показва поле за съобщение (нулев първи аргумент, тъй като в SWT приложение не съществува Swing рамка).