我創建了一個簡單的Java應用程序,每秒鐘連續10秒鐘向JTable
添加一個新行。它由三個類組成。JAR Bundler使用OSXAdapter導致應用程序滯後或終止
一旦程序啓動
public class JarBundlerProblem {
public static void main(String[] args)
{
System.err.println("Initializing controller");
new Controller();
}
}
創建GUI和改變它通過doWork()
public class Controller {
public Controller()
{
doWork(null);
}
public static void doWork(String s)
{
GUI gui = new GUI();
for (int i=0; i<10; i++)
{
gui.addRow("Line "+(i+1));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
最後,GUI控制器,該控制器被稱爲主類
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class GUI {
private JFrame frame = new JFrame();
private DefaultTableModel model = new DefaultTableModel();
private JTable table = new JTable(model);
private JScrollPane pane = new JScrollPane(table);
public GUI()
{
model.addColumn("Name");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(pane);
frame.pack();
frame.setVisible(true);
}
public void addRow(String name)
{
model.addRow(new Object[]{name});
}
}
由於我開發OS X的,我需要能夠到我的應用程序與特定文件類型關聯(比方說.jarbundlerproblem
),我一直在使用Apple Jar Bundler捆綁我JAR
文件到APP
。我已經成功完成了這項工作,我的應用程序打開,數到十,每秒寫出。現在
,對這個問題
默認情況下,雙擊.jarbundlerproblem
,並且該文件與我的應用程序相關聯,將無法通過我雙擊作爲參數傳遞給應用程序的文件。顯然,這只是OS X上的Java作品。
由於我需要能夠看到雙擊的文件,我正在使用OSXAdapter這是Apple爲此目的製作的Java庫。這一點,我已經通過改變我Controller
類的構造函數來實現,加上另一個方法registerForMacOSXEvents()
:
public Controller()
{
registerForMacOSXEvents();
//doWork(null);
}
public void registerForMacOSXEvents() {
try {
OSXAdapter.setFileHandler(this, getClass().getDeclaredMethod("doWork", new Class[] { String.class }));
} catch (Exception e) {
System.err.println("Error while loading the OSXAdapter:");
e.printStackTrace();
}
}
但這(未成年人)的修改之後,我的應用程序開始演戲了。有時,即使在控制檯中可以看到它剛剛啓動(即寫入了Initializing controller
),但它仍然不會打開,但經過幾次嘗試後,它最終會啓動,但前10秒窗口將完全空白,之後,將添加10行。
幫助
現在,我已經竭盡全力來應付這一相當多,而且好像還沒有關於既不OSXAdapter也不罐捆紮機大量的文檔資料。我究竟做錯了什麼?或者我不應該在第一時間使用OSXAdapter或Jar Bundler?
只是爲了確保我瞭解OSXAdapter(不熟悉MAC):基本上這是一個線程運行 - 你的控制範圍之外 - 這與字符串短信中的doWork報告其結果,直到它準備好(文件名?) ,註冊後立即開始?它如何表示準備好了? – kleopatra
很高興幫助:-)請你出示你的解決方案(沒有掛單)? – kleopatra
@kleopatra我不知道OSXAdapter是如何工作的,我只是簡單地熟悉它。如果您有興趣瞭解更多信息,請訪問http://developer.apple.com/library/mac/#samplecode/OSXAdapter/Listings/src_OSXAdapter_java。HTML#// apple_ref/DOC/UID/DTS10000685-src_OSXAdapter_java-DontLinkElementID_5 – kba