使用OSXAdapter 處理與macOS 上的應用程式關聯的雙擊JAR 檔案時,您可能會遇到以下問題:滯後或應用程式終止。這可能是由於阻塞了事件調度執行緒 (EDT)。
解決方案:
要解決此問題,請考慮以下操作:
使用 S使用 S3wing或Runnable:
刪除EDT 上的休眠:
替代方法:
避免JAR捆綁程序:
MVC架構:
附錄:
程式碼片段:
import java.awt.EventQueue; import java.awt.event.ActionEvent; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class TableAddTest extends JPanel implements Runnable { private static final int N_ROWS = 8; private static String[] header = {"ID", "String", "Number", "Boolean"}; private DefaultTableModel dtm = new DefaultTableModel(null, header); private JTable table = new JTable(dtm); private JScrollPane scrollPane = new JScrollPane(table); public TableAddTest() { this.setLayout(new BorderLayout()); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); this.add(scrollPane, BorderLayout.CENTER); JPanel panel = new JPanel(); panel.add(new JButton(new AbstractAction("Add Row") { @Override public void actionPerformed(ActionEvent e) { EventQueue.invokeLater(TableAddTest.this); } })); this.add(panel, BorderLayout.SOUTH); } private void addRow() { dtm.addRow(new Object[]{ Character.valueOf('A' + dtm.getRowCount()), Character.valueOf('A') + dtm.getRowCount(), Integer.valueOf(dtm.getRowCount()), Boolean.valueOf(dtm.getRowCount() % 2 == 0) }); } @Override public void run() { addRow(); table.scrollRectToVisible(table.getCellRect(dtm.getRowCount() - 1, 0, true)); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new TableAddTest()); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); new Thread(new TableAddTest()).start(); } }); } }
注意: 程式碼的突出顯示部分顯示如何使用EventQueue.invokeLater() 更新 EDT 上的 GUI,同時使用 Runnable 來更新 EDT 上的 GUI。執行任務。
以上是為什麼我的 macOS JAR 應用程式在使用 OSXAdapter 時會出現延遲或崩潰,如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!