我创建了一个简单的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