我在Java/JavaFX中编写了一个程序,因为我需要跨平台支持.随着我的进步,我需要做一些Java中无法实现的低级操作系统网络操作.我从Runtime.exec()开始,转移到JNA/JNI,现在我担心维护操作系统与Java的兼容性最终会比仅移植到本机应用程序更多.
做这个的最好方式是什么?
我知道GTK +受到*nix和windows的支持,所以我想我会将它用于我的UI.为每个操作系统维护不同版本的应用程序有多难?您是否可以建议一个起点来编写需要跨平台但仍具有低级操作系统访问权限的东西?我有很多Java经验(以及使用OpenGL的大量C++)但我以前从未关心过任何事情.
或者,是否有一种很好的方法来构建原始数据包,发送ICMP ping以及从Java执行其他低级别网络任务?
我想创建一个几乎与返回的对象相同FXCollections.observableArrayList()但具有一些额外功能的类.我的第一个想法就像是
public class MyObservableList implements ObservableList
{
private ObservableList list = FXCollections.observableArrayList();
public functionWhatever()
{
// whatever
}
}
Run Code Online (Sandbox Code Playgroud)
但这意味着要覆盖所带来的~30个功能ObservableList(这似乎暗示我做错了什么).
FXCollections.observableArrayList()返回一个类型的对象com.sun.javafx.collections.ObservableListWrapper,但是当我扩展时,ObservableListWrapper我需要创建一个类似的构造函数
MyObservableList( List arg0 )
Run Code Online (Sandbox Code Playgroud)
要么
MyObservableList( List arg0, Callback arg1 )
Run Code Online (Sandbox Code Playgroud)
这让我担心,因为FXCollections.observableArrayList()不接受任何争论.
我不知道如何FXCollections创建ObservableListWrapper它返回的对象,但我希望MyObservableList与返回的对象相同FXCollections(加上一些额外的函数).
我该怎么做呢?
我正在使用wordpress.我用jQuery做一个ajax调用,PHP回应了一个JSON对象,但我在javascript中得到的响应在末尾添加了一个"0",这使得解码json对象失败.
PHP:
function newspaper_getpost() {
$d = array('foo' => 'bar', 'baz' => 'long');
echo json_encode($d);
}
add_action('wp_ajax_newspaper_getpost', 'newspaper_getpost');
Run Code Online (Sandbox Code Playgroud)
JS:
$.post(MyAjax.ajaxurl,{
action : 'newspaper_getpost',
postID : $(this).val()
}, function(response) {
console.log(response);
});
Run Code Online (Sandbox Code Playgroud)
输出:
{"foo":"bar","baz":"long"}0
Run Code Online (Sandbox Code Playgroud)
我试过了
echo substr( json_encode($d), 0, -1);
Run Code Online (Sandbox Code Playgroud)
得到了
{"foo":"bar","baz":"long"0
Run Code Online (Sandbox Code Playgroud)
所以我确定它不是PHP方面.我可以在响应结束时删除"0",但我觉得更大的事情正在发生,我不想做一个廉价的黑客来使它工作.JQuery 1.6.1顺便说一下.谢谢!
这是我的脚本:
<script>
Raphael.fn.polyline = function(pointString) {
return this.path("M" + pointString);
};
window.onload = function() {
var paper = Raphael("holder", 500, 500);
paper.circle(100, 175, 70).attr({"stroke-width":10, "stroke":"red"});
var a = paper.polyline("92,102 96,91 104,91 108,102").attr({"fill":"green", "stroke-opacity":"0"}).rotate(25, 100, 175);
var b = paper.polyline("92,102 96,91 104,91 108,102").attr({"fill":"green", "stroke-opacity":"0"}).rotate(45, 100, 175);
var c = paper.polyline("92,102 96,91 104,91 108,102").attr({"fill":"green", "stroke-opacity":"0"}).rotate(65, 100, 175);
var group = paper.set();
group.push(a, b, c);
group.translate(60);
};
</script>
Run Code Online (Sandbox Code Playgroud)
当我使用raphael-1.5.2时,结果是:

当我使用raphael 2.0时,结果是:

在1.5.2中,它使用旋转变换来旋转圆周围的对象,在2.0中它使用矩阵变换.我假设矩阵变换会转换该对象的坐标系,因此当您稍后在xy方向上转换对象时,它会在xy中将其转换为该对象的相对值.
我需要能够在红色圆圈的边缘添加绿色对象,然后能够在同一方向上拖动和移动所有内容.我是否坚持使用1.5.2或者我只是错过了2.0中的翻译是如何变化的?
这让我困扰了很长时间,所以我想我会继续问问.
如果我写
import java.util.*;
import java.lang.*;
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
new Shape();
new Triangle();
}
public static class Shape
{
static String name = "shape";
Shape()
{
printName();
}
public void printName()
{
System.out.println( name() );
}
public String name()
{
return name;
}
}
public static class Triangle extends Shape
{
static String name = "triangle";
public String name()
{
return name;
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么输出就是
shape
triangle
Run Code Online (Sandbox Code Playgroud)
但如果我写
import java.util.*; …Run Code Online (Sandbox Code Playgroud)