使用FXML的JavaFX的MVC模型听起来很棒,但我很难找到如何组织我的项目包.
我发现的关于JavaFX的每一个教程都过于简单和无组织:他们只需创建一个包并在那里创建所有内容,每个控制器,每个fxml,每个css.我不想那样.我希望事情能在正确的位置.
尽管如此,JavaFX的"路径"似乎......"有限".使用URL使得如果我想将资源限制为本地文件,我必须完成所有工作getClass().getResource("foo.fxml").openStream().这很好,但是通过从类路径获取资源,路径来自类所在的包.我有点想要项目的根.这会简化我的生活,但JavaFX似乎并没有像这样工作.
让我们来看一个实际的例子:
想象一下,我有一个FXML"登录屏幕".想象一下,我希望登录屏幕使用样式表.理想情况下,该css将与该fxml位于同一个包中.但是,如果我想在另一个FXML中使用相同的.css呢?这是否意味着我必须将两个FXML放在同一个包中?显然我"不需要",但我该怎么做呢?
另外,假设我想在正确登录时更改场景.在FXML Controller适当的事件中,我将不得不调用"setScene".如果我在不同的包装中使用FXML,那么这条路也很难获得.似乎所有东西都在一个巨大的膨胀包中,或者一切都很难进入而不诉诸"../../dir"之类的黑客.
http://docs.oracle.com/javafx/2/best_practices/jfxpub-best_practices.htm中的Henley Sales应用程序似乎是一个组织良好的应用程序的示例,尽管该应用程序是单个TabPane.不幸的是(至少我认为)来源不公开.它的想法是这样的:
Run Code Online (Sandbox Code Playgroud)client Main.class styles.css client.images image.png client.screen1 Screen1.fxml Screen1Controller.java client.screen2 Screen2.fxml Screen2Controller.java ...
这似乎是一个糟糕的开始,但它有一些问题(或者至少我认为它们是问题).
对于'The Henley Sales',它很聪明,有一个Main可以调用其中一个包'FXML(易于访问,FXML的目录在Main类之下).不过,对于样式表,这必须是硬编码的scene.getStylesheets().add(...);.我真的更愿意选择在FXML中选择样式表.Afterall,stylesheet是View组件的一部分.从FXML中的URL访问.css文件对于这种结构来说会有点困难,因为它位于其目录之上.
此外,通过这个组织,我如何才能合理地改变场景?在这个项目中,这不是必需的,因为整个项目是一个TabbedPane.主叫它,它完成了.无需更多交换.但是一个简单的登录场景(或者为什么需要交换整个场景的原因)需要访问FXML路径.
然后是资源.Css文件可能需要使用图像.该结构通过将.css文件放在顶部,并为.css可能需要的文件创建一个包来解决它.如果我想要一个特定的FXML有一个不同的.css,那么,另一个问题就会到来.
这似乎是一个循环.Css需要访问共享资源文件夹.FXML需要访问Css.FXML的控制器需要访问其他FXML.我希望我清楚我的项目结构存在疑虑.请帮我创建一个JavaFX项目结构,该结构对于超过基本的应用程序来说足够强大,或者将我重定向到一些好的源代码.
哦,我顺便使用Netbeans.

见上图; 基本上,我想要一个简单的测试来检查一个点是否在线段的范围内.我有的信息(或输入,如果您愿意)是点的坐标和线段终点的坐标.我想要的输出是一个简单的布尔值.我怎样才能以简单的方式检查这个?
我正在学习Lambda表达式,我知道可以在Runnable功能界面和Thread类中使用它们.
我试图创建自己的:
package tests;
public interface Blabla
{
public void doStuff();
}
Run Code Online (Sandbox Code Playgroud)
这个简单的测试编译:
Blabla bla = () -> System.out.println("Lol");
Run Code Online (Sandbox Code Playgroud)
然后我尝试创建一个像Thread这样的类
package tests;
public class Dodo implements Blabla
{
public void doStuff()
{
// TODO Auto-generated method stub
}
}
Run Code Online (Sandbox Code Playgroud)
这不编译:
Dodo dodo = () -> System.out.println("LoL");
Run Code Online (Sandbox Code Playgroud)
我无法解释如何创建一个允许使用lambda表达式的类.
Thread如何允许在不作为接口的情况下使用Lambda表达式?
我正在开发一个项目,它基本上是一个带有游戏逻辑的prolog服务器,它与c ++ openGL程序进行通信,该程序呈现从prolog接收的用于游戏绘图的信息.
这是服务器循环,在连接成功后启动:
serverLoop(Stream) :-
repeat,
write('reading'), nl,
read(Stream, ClientMsg),
write('Received: '), write(ClientMsg), nl,
write('Parsing'), nl,
parse_input(ClientMsg, MyReply),
write('formatting'), nl,
format(Stream, '~q.~n', [MyReply]),
write('Wrote: '), write(MyReply), nl,
write('flushing'), nl,
flush_output(Stream),
write('end condition'), nl,
(ClientMsg == quit; ClientMsg == end_of_file), !.
Run Code Online (Sandbox Code Playgroud)
它充满了写作,因为我已经调试了几个小时.
这里要注意的重要部分是:
parse_input(ClientMsg, MyReply)
Run Code Online (Sandbox Code Playgroud)
这是其中i从发送C++接收的所有消息,并在时刻我有parse_input方法有以下几种:
parse_input(putpieceHuman(BOARD, PIECE, LINE, COLUMN), Answer) :-
write('Parsing putpieceHuman'), nl,
drawBoard(BOARD), nl,
putpieceHuman(BOARD, PIECE, LINE, COLUMN, Answer).
parse_input(putpiecePC(BOARD, PIECE, AI), Answer):-
write('Parsing putpiecePC'), nl,
drawBoard(BOARD), nl,
putpiecePC(BOARD, PIECE, Answer, AI).
Run Code Online (Sandbox Code Playgroud)
它们非常相似.第一个是玩家游戏(指定游戏的位置),第二个是计算机游戏(AI是我希望计算机拥有的智能值,让我们只考虑值0,这是完全随机的)
这些是解析器调用的perdicates:
putpieceHuman(BOARD, PIECE, LINE, …Run Code Online (Sandbox Code Playgroud) 我正在编写一个3D图像引擎(它读取带有场景信息的XML并用openGL打印),用于大学,在visual studio中(不幸的是......),我正在做解析器atm,它将xml读入一个简单的树状数据结构.其中一个元素是Camera,在我添加数据结构的那部分之前,程序运行正常,但是在我添加它之后,我遇到以下错误:
1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: virtual char const * __thiscall std::exception::what(void)const " (?what@exception@std@@UBEPBDXZ) already defined in MSVCRTD.lib(MSVCR100D.dll)
1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z) already defined in MSVCRTD.lib(MSVCR100D.dll)
1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ) already defined in MSVCRTD.lib(MSVCR100D.dll)
1>LIBCMT.lib(stdexcpt.obj) : error LNK2005: "public: __thiscall std::exception::exception(class std::exception const &)" (??0exception@std@@QAE@ABV01@@Z) already defined in MSVCRTD.lib(MSVCR100D.dll)
1>LIBCMT.lib(_fpinit_.obj) : error LNK2005: __fltused already defined in a previous module
1>LIBCMT.lib(_fpinit_.obj) : error LNK2005: __ldused already …Run Code Online (Sandbox Code Playgroud)